On 1 July 2018 at 20:47, Ethan Furman <et...@stoneleaf.us> wrote: > On 07/01/2018 06:03 AM, Ivan Levkivskyi wrote:> On 27 June 2018 at 15:46, > Ethan Furman wrote: > > [...] >>> So I'm asking the community: What real-world examples can you offer for >>> either behavior? Cases where nested >>> classes should be enum members, and cases where nested classes should >>> not be members. >>> >> >> I wanted few times to make an enum of enums. For example: >> >> class Method(Enum): >> Powell = 1 >> Newton_CG = 2 >> <few more> >> class Trust(Enum): >> Constr = 3 >> Exact = 4 >> <few more> >> >> So that one can write: >> >> minimize(..., method=Method.Powell) >> minimize(..., method=Method.Trust.Exact) # this currently fails >> > > In such a case, would you want/expect for > > --> list(Method) > > to return > > [<Powel: 1>, <Newton_CG: 2>, ..., <Trust: -something->] > > ? >
I am fine with what `list(Method)` does currently: [<Method.Powell: 1>, <Method.Newton_CG: 2>, <Method.Trust: <enum 'Trust'>>] I think it is intuitive that the nested enums are _not_ automatically flattened. Also it is easy to write a helper that manually flattens nested enums, but it would be tedious to group them back if they are already flattened. The only thing that I find a bit unintuitive is that one needs to write `Method.Trust.value.Exact` instead of just `Method.Trust.Exact`. Maybe his can be allowed by adding a `__getattr__` to `Method` (by the metaclass) that will check if a value is an enum and delegate the attribute access. -- Ivan
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/