On Sun, Apr 03, 2022 at 07:24:42PM -0000, Brian McCall wrote: > Let's say we have one of your class-ical ( :D ) geometrical shapes > hierarchy, including an abstract Shape class. > > ``` > class Shape(abc.ABC): > @abc.abstractmethod > def area(self): > """"""
The rest of your code sample only shows single inheritence, so it is doubtful that the issues you had were related to the issues in this thread. > In my mind, the best way to make the code work, and promote use and > contribution to it, is to make it so that users can pass in callables > instead of fixed values to __init__, and the machinery that returns an > object will create properties to represent that value if it is a > callable, otherwise attributes as shown above. That sounds like a convoluted solution, but maybe I don't understand your requirements. > I will not detail my > solution here, but if you know how properties work, then you know that > this solution requires classes to be generated on the fly. I thought I understood how properties work, but I didn't know (and still don't) that this solution requires classes to be generated on the fly. Does that imply that every shape instance has its own unique class? > This problem was a tough nut to crack Perhaps I don't understand your requirements, but this sounds like a trivial nut to crack. Put the logic in your properties: @property def radius(self): r = self._radius if callable(r): return r() else: return r Although I'm not sure why you want the radius of a shape to be a callable in the first place. Seems all very over-engineered. Anyway, there's nothing in your description here that hints as to how or why super() is an issue, except in the sense that you're doing Complicated Things⢠with metaclasses, `__new__`, dynamically-generated classes, ABCs, properties, and very possibly the Philosopher's Stone *wink*, so I'm not surprised you ran into difficulties. By the way, what super does is explained in fine detail here: https://www.python.org/download/releases/2.3/mro/ I know, I know, who goes looking through the docs for Python 2.3 for current features??? But you get to that link via the glossary entry for "method resolution order". -- Steve _______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/HTRZEKI6UWVZX2OCGOSQCJYW5PRMHHQ6/ Code of Conduct: http://python.org/psf/codeofconduct/