In [307]:
def who(obj):
print(id(obj), obj)
class A:
def m(self):
print("A's m()")
class AA:
pass
class B(A):
def __init__(self):
who(super())
who(super(self.__class__, self))
who(super(B))
who(super(B, self))
who(super(A, B))
class C(A):
def __init__(self):
print(super())
print(super(B))
print(super(A, C))
class D(B, C):
def __init__(self):
print(super().__mro__)
print(super(D).mro())
print(super(A, B, D).mro())
In [312]:
b = B()
dir(super(b).m())
# who(super(A))
# who(super(B))
In [295]:
class E:
def __init__(self):
pass
def run(self):
print("run")
In [296]:
e = E()
e.run()
E.run(e)
In [297]:
D.__mro__
Out[297]:
In [298]:
print(super.__doc__)
In [299]:
type(super)
Out[299]:
In [327]:
class A:
def method(self):
who(self)
print("A.method")
class B(A):
def method(self):
who(self)
print("B.method")
class C(B):
__mro__ = ()
def mro():
return []
class D(C):
def __init__(self):
super(D, self).method()
super(B, self).method()
def mro():
return []
# who(super(C, self).method)
# who(super(C, D).method)
# who(super(B, D).method)
In [328]:
d = D()
d.method()
C.__mro__
Out[328]:
In [306]:
super(A)
Out[306]:
In [303]:
class X:
pass
class Y:
def __init__(self):
pass
who(X)
who(Y)
who(Y())
In [372]:
class M(type):
def __new__(metacls, cls, bases, classdict):
return super().__new__(metacls, cls, bases, classdict)
def mro(cls):
return [object]
In [373]:
class N(metaclass=M):
def method(self):
print("N's method")
class O(N):
def method(self):
print("O's method")
In [374]:
O.mro()
Out[374]:
In [377]:
o = O()
O.__name__
Out[377]:
In [ ]: