在一些教程中,我读到对于 __init__
方法,我必须执行以下操作:
class App:
def __init__(self):
...
但是,在 PySide 中我发现了这个。 QWidget.__init__(self)
行有什么作用以及我需要它吗?
class App(QWidget):
def __init__(self):
QWidget.__init__(self)
...
最佳答案
调用cls.__init__(self)
(其中cls
可以是任何类),将简单地调用cls
的
。这是一个例子:self
上的 __init__
class Foo(object):
def __init__(self):
self.foo = True
print('Initializing object {} on Foo.__init__!'.format(self))
class Bar(object):
def __init__(self):
Foo.__init__(self)
self.bar = True
print('Initializing object {} on Bar.__init__!'.format(self))
现在创建 Bar
的实例将输出两个 __init__
:
>>> b = Bar()
Initializing object <__main__.Bar object at 0x00000000039329E8> on Foo.__init__!
Initializing object <__main__.Bar object at 0x00000000039329E8> on Bar.__init__!
此外,b
现在具有两个属性:foo
和 bar
。
您应该很少调用其他类的__init__
,除非您要子类化其他类。上面的示例通常是不正确的,因为 Bar
不是 Foo
的子类。
即使您对某个类进行子类化,也不应该直接使用其名称来访问该类,而应使用 Python 的内置函数 super()
:
# "WRONG" (usually)
class X(Y):
def __init__(self):
Y.__init__(self)
# RIGHT
class X(Y):
def __init__(self):
super().__init__() # self is omitted when using super()
关于python - PySide 中的 __init__ 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31515585/