私が今学んだこととして、私は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の場合、obj
またはcls
を指定せずにスーパーを正常に使用できます。しかし、なぜ私は同じことをすることができないの__new__
ですか?なぜなら、ケース3の場合、そのようにスーパーを使用すると、エラーが発生したからです。しかし、私がそれをこのように使用する場合:
super(B, cls).__new__(cls)
エラーはありません。