Open
Description
Required prerequisites
- Make sure you've read the documentation. Your issue may be addressed there.
- Search the issue tracker and Discussions to verify that this hasn't already been reported. +1 or comment there if it has.
- Consider asking first in the Gitter chat room or in a Discussion.
What version (or hash if on master) of pybind11 are you using?
2.6.2
Problem description
When adding a .def(__str__, ...)
on an instance of py::enum_ the name
method of the enum members turns from an attribute into a method (i.e. you need parentheses to call it). Seems to happen both with and without a py::prepend()
.
Also this creates warnings when generating documentation with sphinx, because the docstring for name
will show all the overloads for __str__
. Those will contain *args
and **kwargs
which will be considered unclosed emphasis and strong emphasis characters.
Reproducible example code
enum class TestType
{
Unknown = -1,
RandomForest,
NeuralNetworkLegacy,
NeuralNetwork
};
py::enum_<TestType>(mod, "TestType")
.value("NeuralNetwork", TestType::NeuralNetwork)
.value("NeuralNetworkLegacy", TestType::NeuralNetworkLegacy)
.value("RandomForest", TestType::RandomForest)
.def("__str__", [](const TestType& t) { return "Hello"; }, py::prepend());
Then in Python:
TestType.NeuralNetwork.name
Out[1]: <bound method PyCapsule.name of <TestType.NeuralNetwork: 2>>
Is this a regression? Put the last known working version here if it is.
2.5