[Python-Dev] PEP 560: bases classes (original) (raw)
Koos Zevenhoven k7hoven at gmail.com
Wed Nov 15 09:50:35 EST 2017
- Previous message (by thread): [Python-Dev] PEP 560: bases classes / confusion
- Next message (by thread): [Python-Dev] PEP 560: bases classes / confusion
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
For anyone confused about similar things, I expect you to be interested in my post on python-ideas from today:
https://mail.python.org/pipermail/python-ideas/2017-November/047896.html
––Koos
On Wed, Nov 15, 2017 at 4:20 PM, Jim J. Jewett <jimjjewett at gmail.com> wrote:
(1) I found the following (particularly "bases classes") very confusing:
""" If an object that is not a class object appears in the bases of a class definition, then
_mroentries_
is searched on it. If found, it is called with the original tuple of bases as an argument. The result of the call must be a tuple, that is unpacked in the bases classes in place of this object. (If the tuple is empty, this means that the original bases is simply discarded.) """ Based on the following GenericAlias/NewList/Tokens example, I think I now I understand what you mean, and would have had somewhat less difficulty if it were expressed as: """ When an object that is not a class object appears in the (tuple of) bases of a class definition, then attribute_mroentries_
is searched on that non-class object. If_mroentries_
found, it is called with the entire original tuple of bases as an argument. The result of the call must be a tuple, which is unpacked and replaces only the non-class object in the tuple of bases. (If the tuple is empty, this means that the original bases is simply discarded.) """ Note that this makes some assumptions about the mroentries signature that I wasn't quite sure about from the example. So building on that: class ABList(A, NewList[int], B): I think the following will happen: "NewList[int]" will be evaluated, and classgetitem called, so that the bases tuple will be (A, GenericAlias(NewList, int), B) # (A) I think mroentries gets called with the full tuple, # instead of just the object it is found on. # (B) I think it is called on the results of evaluating # the terms within the tuple, instead of the original # string representation. tmp = mroentries(A, GenericAlias(NewList, int), B) # (C) I think mroentries returns a replacement for # just the single object, even though it was called on # the whole tuple, without knowing which object it # represents. bases = (A, tmp, B) # (D) If there are two non-class objects, I think the # second one gets the same arguments as the first, # rather than an intermediate tuple with the first such # object already substituted out. -jJ
Python-Dev mailing list Python-Dev at python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/ k7hoven%40gmail.com
--
- Koos Zevenhoven + http://twitter.com/k7hoven + -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.python.org/pipermail/python-dev/attachments/20171115/879eedcb/attachment-0001.html>
- Previous message (by thread): [Python-Dev] PEP 560: bases classes / confusion
- Next message (by thread): [Python-Dev] PEP 560: bases classes / confusion
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]