Как я только что узнал, я могу использовать супер так: super (класс, obj_of_class-or -_subclass_of_class)
Код идет ниже:
#Case 1
class A(object):
def __init__(self):
print "A init"
class B(A):
def __init__(self):
print "B init"
super(B, self).__init__() #ok, I can invoke A __init__ successfully
#Case 2
class A(object):
@classmethod
def foo(cls):
print "A foo"
class B(object):
@classmethod
def foo(cls):
print "B foo"
super(B, cls).foo() #ok, I can invoke A foo successfully
#Case 3
class A(object):
def __new__(cls):
print "A new"
return super(A, cls).__new__(cls)
class B(A):
def __new__(cls):
print "B new"
return super(B, cls).__new__() #Oops, error
Вопрос:
В случае 1 и 2 я могу использовать супер успешно, не указав obj или cls для работы. Но почему я не могу сделать то же самое для __new__? Потому что, в случае 3, если я использую супер таким образом, я получил ошибку. Но если я использую его так:
super(B, cls).__new__(cls)
Ошибка.