直接调用__init__的目的是什么?

时间:2013-04-21 00:27:17

标签: python init

我很难弄清楚我遇到的一些代码的目的。

代码有一个类Foo,它有一个带有多个参数的__init__方法。根据我迄今为止学到的Python,通过调用Foo('bar'),它会将此字符串作为参数传递给__init__(我认为它应该等同于构造函数)。

但我遇到的问题是我正在查看的代码是直接调用Foo.__init__('bar')。这样做的目的是什么?我几乎觉得我错过了__init__背后的其他目的。

3 个答案:

答案 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__()的唯一有效案例。