这个问题与帖子有关Python 中的“super”有什么作用? https://stackoverflow.com/questions/222877/how-to-use-super-in-python , 如何初始化基(超)类? https://stackoverflow.com/questions/3694371/how-do-i-initialize-the-base-super-class-in-python , and Python:如何从超类创建子类? https://stackoverflow.com/questions/1607612/python-how-do-i-make-a-subclass-from-a-superclass它描述了两种初始化方法SuperClass
从一个内SubClass
as
class SuperClass:
def __init__(self):
return
def superMethod(self):
return
## One version of Initiation
class SubClass(SuperClass):
def __init__(self):
SuperClass.__init__(self)
def subMethod(self):
return
or
class SuperClass:
def __init__(self):
return
def superMethod(self):
return
## Another version of Initiation
class SubClass(SuperClass):
def __init__(self):
super(SubClass, self).__init__()
def subMethod(self):
return
所以我有点困惑是否需要明确地 pass self
作为参数SuperClass.__init__(self)
and
super(SubClass, self).__init__()
。
(事实上,如果我打电话SuperClass.__init__()
我收到错误
TypeError: __init__() missing 1 required positional argument: 'self'
)。但是当调用构造函数或任何其他类方法时(即:
## Calling class constructor / initiation
c = SuperClass()
k = SubClass()
## Calling class methods
c.superMethod()
k.superMethod()
k.subMethod()
), The self
参数已传递隐含地 .
我的理解self
关键字是它与this
C++ 中的指针,而它提供对类实例的引用。它是否正确?
如果总是有一个当前实例(在本例中SubClass
),那么为什么self
需要明确包含在调用中SuperClass.__init__(self)
?
Thanks