我很难弄清楚我遇到的一些代码的目的。
代码有一个类Foo
,它有一个带有多个参数的__init__
方法。根据我迄今为止学到的Python,通过调用Foo('bar')
,它会将此字符串作为参数传递给__init__
(我认为它应该等同于构造函数)。
但我遇到的问题是我正在查看的代码是直接调用Foo.__init__('bar')
。这样做的目的是什么?我几乎觉得我错过了__init__
背后的其他目的。
答案 0 :(得分:16)
实例化类时,会调用__init__()
方法。但是,父类中的__init__()
方法不会自动调用,因此如果要扩展其功能,需要直接调用它:
class A:
def __init__(self, x):
self.x = x
class B(A):
def __init__(self, x, y):
A.__init__(self, x)
self.y = y
注意,上述调用也可以使用super编写:
class B(A):
def __init__(self, x, y):
super().__init__(x)
self.y = y
__init__()
方法的目的是初始化类。它通常负责填充实例变量。因此,您希望为类层次结构中的所有类调用__init__()
。
答案 1 :(得分:1)
Python允许您直接调用构造函数(__init__
)。通过调用Foo.__init__(obj, 'bar')
,您正在对obj
请参阅此代码:
class Foo:
def __init__(self, s):
self.s = s
f = Foo('abc')
print(f.s) # prints 'abc'
Foo.__init__(f, 'def')
print(f.s) # prints 'def'
答案 2 :(得分:0)
是 - 继承类时调用父类的__init__()
。 AFAIK,这是明确调用__init__()
的唯一有效案例。