Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
gaoqiong
pybind11
Commits
2110d2d8
Unverified
Commit
2110d2d8
authored
Dec 31, 2020
by
Eric Cousineau
Committed by
GitHub
Dec 31, 2020
Browse files
enum: add missing Enum.value property (#2739)
* enum: Add Enum.value property * simplify * address review
parent
b7dfe5cc
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
17 additions
and
7 deletions
+17
-7
include/pybind11/pybind11.h
include/pybind11/pybind11.h
+1
-0
tests/test_enum.py
tests/test_enum.py
+16
-7
No files found.
include/pybind11/pybind11.h
View file @
2110d2d8
...
@@ -1731,6 +1731,7 @@ public:
...
@@ -1731,6 +1731,7 @@ public:
m_base
.
init
(
is_arithmetic
,
is_convertible
);
m_base
.
init
(
is_arithmetic
,
is_convertible
);
def
(
init
([](
Scalar
i
)
{
return
static_cast
<
Type
>
(
i
);
}),
arg
(
"value"
));
def
(
init
([](
Scalar
i
)
{
return
static_cast
<
Type
>
(
i
);
}),
arg
(
"value"
));
def_property_readonly
(
"value"
,
[](
Type
value
)
{
return
(
Scalar
)
value
;
});
def
(
"__int__"
,
[](
Type
value
)
{
return
(
Scalar
)
value
;
});
def
(
"__int__"
,
[](
Type
value
)
{
return
(
Scalar
)
value
;
});
#if PY_MAJOR_VERSION < 3
#if PY_MAJOR_VERSION < 3
def
(
"__long__"
,
[](
Type
value
)
{
return
(
Scalar
)
value
;
});
def
(
"__long__"
,
[](
Type
value
)
{
return
(
Scalar
)
value
;
});
...
...
tests/test_enum.py
View file @
2110d2d8
...
@@ -13,15 +13,24 @@ def test_unscoped_enum():
...
@@ -13,15 +13,24 @@ def test_unscoped_enum():
# name property
# name property
assert
m
.
UnscopedEnum
.
EOne
.
name
==
"EOne"
assert
m
.
UnscopedEnum
.
EOne
.
name
==
"EOne"
assert
m
.
UnscopedEnum
.
EOne
.
value
==
1
assert
m
.
UnscopedEnum
.
ETwo
.
name
==
"ETwo"
assert
m
.
UnscopedEnum
.
ETwo
.
name
==
"ETwo"
assert
m
.
EOne
.
name
==
"EOne"
assert
m
.
UnscopedEnum
.
ETwo
.
value
==
2
# name readonly
assert
m
.
EOne
is
m
.
UnscopedEnum
.
EOne
# name, value readonly
with
pytest
.
raises
(
AttributeError
):
with
pytest
.
raises
(
AttributeError
):
m
.
UnscopedEnum
.
EOne
.
name
=
""
m
.
UnscopedEnum
.
EOne
.
name
=
""
# name returns a copy
with
pytest
.
raises
(
AttributeError
):
foo
=
m
.
UnscopedEnum
.
EOne
.
name
m
.
UnscopedEnum
.
EOne
.
value
=
10
foo
=
"bar"
# name, value returns a copy
# TODO: Neither the name nor value tests actually check against aliasing.
# Use a mutable type that has reference semantics.
nonaliased_name
=
m
.
UnscopedEnum
.
EOne
.
name
nonaliased_name
=
"bar"
# noqa: F841
assert
m
.
UnscopedEnum
.
EOne
.
name
==
"EOne"
assert
m
.
UnscopedEnum
.
EOne
.
name
==
"EOne"
nonaliased_value
=
m
.
UnscopedEnum
.
EOne
.
value
nonaliased_value
=
10
# noqa: F841
assert
m
.
UnscopedEnum
.
EOne
.
value
==
1
# __members__ property
# __members__ property
assert
m
.
UnscopedEnum
.
__members__
==
{
assert
m
.
UnscopedEnum
.
__members__
==
{
...
@@ -33,8 +42,8 @@ def test_unscoped_enum():
...
@@ -33,8 +42,8 @@ def test_unscoped_enum():
with
pytest
.
raises
(
AttributeError
):
with
pytest
.
raises
(
AttributeError
):
m
.
UnscopedEnum
.
__members__
=
{}
m
.
UnscopedEnum
.
__members__
=
{}
# __members__ returns a copy
# __members__ returns a copy
foo
=
m
.
UnscopedEnum
.
__members__
nonaliased_members
=
m
.
UnscopedEnum
.
__members__
foo
[
"bar"
]
=
"baz"
nonaliased_members
[
"bar"
]
=
"baz"
assert
m
.
UnscopedEnum
.
__members__
==
{
assert
m
.
UnscopedEnum
.
__members__
==
{
"EOne"
:
m
.
UnscopedEnum
.
EOne
,
"EOne"
:
m
.
UnscopedEnum
.
EOne
,
"ETwo"
:
m
.
UnscopedEnum
.
ETwo
,
"ETwo"
:
m
.
UnscopedEnum
.
ETwo
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment