Message407617
Regarding comment #1, The wording is correct and there was a reason for using a method. While super() can be used for attribute lookup, use cases are almost entirely dominated by method lookups. For many users, an attribute lookup with super() is unconventional, weird, hard to grok, awkward to demonstrate, and not well motivated by the way super() is actually used.
##############################################################
# Demonstration code for the example in text
class A:
def m(self):
return 42
class B(A):
def m(obj):
return super(B, obj).m()
>>> b = B()
>>> b.m() # Normal invocation
42
>>> A.__dict__['m'].__get__(b, B)() # Equivalent call
42
That said, I will switch it to an attribute lookup for consistency with the other examples in the section and with the current version of the DescriptorHowto.
Regarding comment #2, the objtype argument is optional as shown in all of the examples. The call from object.__getattribute__() always passes in both parameters, even though only the first is required.
################################################################
# Demonstration of __get__() being called with one or two params
class A:
def __init__(self, x):
self.x = x
def m(self, y):
return self.x * y
>>> a = A(10)
>>> a.m(5)
50
>>> vars(A)['m'].__get__(a)(5) # objtype is not required
50
>>> vars(A)['m'].__get__(a, A)(5) # objtype may be used
50
################################################################
# Demonstration of object.__getattribute__ supplying both args
class Desc:
def __get__(self, *args):
return args
class B:
z = Desc()
>>> b = B()
>>> b.z
(<__main__.B object at 0x109156110>, <class '__main__.B'>) |
|
Date |
User |
Action |
Args |
2021-12-03 23:39:41 | rhettinger | set | recipients:
+ rhettinger, zuo, docs@python, martin.panter |
2021-12-03 23:39:41 | rhettinger | set | messageid: <1638574781.2.0.22898103265.issue20751@roundup.psfhosted.org> |
2021-12-03 23:39:41 | rhettinger | link | issue20751 messages |
2021-12-03 23:39:40 | rhettinger | create | |
|