正如我刚刚学到的,我可以super()
这样使用:
super(class, 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's __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's 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 中,我可以成功使用 super 而无需指定obj
orcls
进行操作。但是为什么我不能这样做__new__
呢?因为,在案例 3 中,如果我以这种方式使用 super ,则会出现错误。但如果我这样使用它:
super(B, cls).__new__(cls)
没有错误。