pybind11 icon indicating copy to clipboard operation
pybind11 copied to clipboard

[BUG]: implementing __str__ on an enum turn the name attribute into a method

Open IljaManakov opened this issue 2 years ago • 3 comments

Required prerequisites

  • [X] Make sure you've read the documentation. Your issue may be addressed there.
  • [X] Search the issue tracker and Discussions to verify that this hasn't already been reported. +1 or comment there if it has.
  • [X] 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

IljaManakov avatar Mar 23 '23 09:03 IljaManakov

Also, I found this weird piece. Notice how both methods are called name. They are not identical, though when comparing them with is image

IljaManakov avatar Mar 23 '23 13:03 IljaManakov

The way we have enums implemented currently is a major source of bugs / odd behavior. Open to PRs that improve the situation.

Skylion007 avatar Mar 27 '23 14:03 Skylion007

Are there any beginner-friendly bugs from where I can start with?

varshneydevansh avatar Aug 23 '23 16:08 varshneydevansh