这个问题与以下内容有关:Python中的'super'是什么?,如何初始化基类(super class)? 和 Python:如何从超类(superclass)创建一个子类(subclass)?。它们描述了两种在
SubClass
内部初始化SuperClass
的方法。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
或者
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
所以,我对需要在SuperClass.__init__(self)
和super(SubClass, self).__init__()
中显式传递self
参数有些困惑。(事实上,如果我调用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()
), self
参数被隐式地传递。
我对self
关键字的理解是,它与C ++中的this
指针类似,提供对类实例的引用。这正确吗?
如果总会有一个当前实例(在这种情况下是SubClass
),那么为什么需要在调用SuperClass.__init__(self)
时明确包含self
?
谢谢