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/

Reply via email to