That might work (though not for older Python versions). What kind of API
were you thinking of for adding and deleting abstract methods?

On Thu, Oct 1, 2020 at 01:07 Ben Avrahami <avrahami....@gmail.com> wrote:

>
>
> I suppose it's better than nothing, since right now libraries are
> (rightfully) afraid to modify it or rely on its behaviour. Although I
> expect this will lead to a lot of repeated code, that looks a lot like the
> `__abstractmethods__` population in `_py_abc`. I think it's preferable to
> ease abstract method re-population for 3rd (and 1st) party libraries, but
> the dev team probably knows better. If this is an accepted solution, I'd be
> happy to write a BPO and PR.
>
> On Wed, Sep 30, 2020 at 5:30 PM Guido van Rossum <gu...@python.org> wrote:
>
>> Would it help if ‘__abstractmethods__’ was documented, overruling
>> whatever the PEP says?
>>
>> On Wed, Sep 30, 2020 at 00:01 Ben Avrahami <avrahami....@gmail.com>
>> wrote:
>>
>>> I encountered this problem when I needed to implement a class that
>>> defined all 4 of the comparison operators, once with `dataclass` (for one
>>> implementation) and once with `total_order` (for another).Also, 3rd party
>>> libs are expected to fall down this rabbit hole, and unless they're
>>> expected to modify `__abstractmethods__` and perform abstract logic on
>>> their own- I don't see why the standard library should keep such
>>> computations unavailable.
>>>
>>> On Tue, Sep 29, 2020 at 6:41 PM Eric V. Smith <e...@trueblade.com>
>>> wrote:
>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On 9/29/2020 10:49 AM, Ben Avrahami
>>>>
>>>> wrote:
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On Tue, Sep 29, 2020 at 4:53
>>>>
>>>> PM Bar Harel <bzvi7...@gmail.com> wrote:
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>>
>>>>> I'd like to bring another insight to the
>>>>>
>>>>> table: According to the pep, "Dynamically
>>>>>
>>>>> adding abstract methods to a class, or attempting to
>>>>>
>>>>> modify the abstraction status of a method or class once
>>>>>
>>>>> it is created, are not supported."
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> The notice exists both in the pep and at the abc module's
>>>>>
>>>>> docs, and is exactly what this idea is all about.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> My question is why? Was there an objection for
>>>>>
>>>>> implementing such a thing, or was it complex enough to
>>>>>
>>>>> postpone for the time being?
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> I think this is fine. The "abstract-ness" of a class is not
>>>>
>>>> supposed to change throughout its lifetime. The problem
>>>>
>>>> arises when decorators change the class before it's ever
>>>>
>>>> used, as that should still be considered its
>>>>
>>>> "initialization" as far as the user is concerned, so
>>>>
>>>> its "abstract-ness" should change accordingly.
>>>>
>>>>
>>>> I agree with Guido in that the cleanest solution is to
>>>>
>>>> change the decorators. Perhaps a module function to
>>>>
>>>> recalculate a class's __abstractmethods __, that mixin
>>>>
>>>> decorators can call prior to returning the class. I can't
>>>>
>>>> really think of standard library class decorators that would
>>>>
>>>> use this global function other than `dataclass` and
>>>>
>>>> `total_ordering`, but in this way, 3rd party decorators can
>>>>
>>>> easily support implementing abstract functions.
>>>>
>>>>
>>>> The one downside to this solution is that it can easily
>>>>
>>>> be abused by calling it in the middle of a class's lifetime.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> I think I'd like to see dataclasses handle this directly, so as
>>>>
>>>> to keep it easy to use. But I can be argued with: it's not like a
>>>>
>>>> beginner would stumble over this issue.
>>>>
>>>>
>>>>
>>>>
>>>> Eric
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>>
>>>>
>>>> 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/EQQVNE4IVG5ZLWZHY3HCIATUY32PHWJG/
>>>>
>>>>
>>>> Code of Conduct: http://python.org/psf/codeofconduct/
>>>>
>>>>
>>>>
>>>
>>> _______________________________________________
>>>
>>> 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/ASPJKUZ46MAD5FT6HOLIFSQDFZR7IFGY/
>>>
>>> Code of Conduct: http://python.org/psf/codeofconduct/
>>>
>>> --
>> --Guido (mobile)
>>
>>
>>
>
> --
--Guido (mobile)
_______________________________________________
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/EOROVK52KXYZH6ZNQ7PWAP46XALFXZL4/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to