Почему нам нужно использовать super(drived_class, self)
, если bass_class()
может выполнять ту же работу, что именно делает суперфункция?Я носил некоторый код, пытаясь выяснить, но не получил много.Что такое <super: <class 'b'>, <b object>>
?И есть ли причина, по которой он принимает себя в качестве второго параметра, в отличие от любой другой функции.
>>>class a(object):
... def somefunc(self):
... print("af function")
>>>class b(a):
... def somefunc(self):
... print("overriding af")
... def recalling_bassclass_somefunc(self):
... print("////")
... print("recalling it via super func")
... super(b,self).somefunc()
... print("recalling it via super func with b() instead of self")
... super(b,b()).somefunc()
... print("recalling it via an a class object")
... print(a().somefunc)
... print("printing the a class")
... print(a())
... print("printing a type")
... print(type(a()))
... print("printing the super(b,self)")
... print(super(b,self))
... print("printing the super(b,self) type")
... print(type(super(b,self)))
... print(type(a()) == type(super(b,self)))
... print(a() == super(b,self))
...a().somefunc()
...b().somefunc()
...b().recalling_bassclass_somefunc()
af function
overriding af
////
recalling it via super func
af function
recalling it via super func with b() instead of self
af function
recalling it via an a class object
<bound method a.somefunc of <__main__.a object at 0x00000201DCD207F0>>
printing the a class
<__main__.a object at 0x00000201DCCED748>
printing a type
<class '__main__.a'>
printing the super(b,self)
<super: <class 'b'>, <b object>>
printing the super(b,self) type
<class 'super'>
False
False