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

新手上路,请多包涵

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

该代码有一个类 Foo ,它有一个 __init__ 多个参数的方法。到目前为止,根据我对 Python 的了解,通过调用 Foo('bar') ,它将把这个字符串作为参数传递给 __init__ (我认为这应该等同于构造函数).

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

原文由 Ari 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 636
2 个回答

__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__()

原文由 Raymond Hettinger 发布,翻译遵循 CC BY-SA 3.0 许可协议

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'

原文由 aldeb 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题