当您的类未显式定义 __init__ 方法时会发生什么情况



如果我不在python中使用__init__方法,我的代码质量会受到怎样的影响?举一个简单的例子将不胜感激。

简短的回答;什么也没发生。

长答案;如果你有一个类B,它继承自类A,并且如果B没有定义__init__方法,那么父级(在本例中为 A(的__init__将被调用。

In [137]: class A:
     ...:     def __init__(self):
     ...:         print("In A")
     ...:         
In [138]: class B(A): pass
In [139]: B()
In A
Out[139]: <__main__.B at 0x1230a5ac8>

如果A没有前身,那么全能超类object__init__就会被调用,它什么也不做。

您可以通过查询 dunder __mro__ 来查看类层次结构。

In [140]: B.__mro__
Out[140]: (__main__.B, __main__.A, object)

另请参阅为什么我们在 Python 类中使用 __init__?,了解何时何地适合使用的一些上下文。

这里不是质量问题,在python支持Object-oriented-design中,__init__是在首先创建对象时提供数据的方法。在OOPS,这被称为constructor。换句话说,构造函数是准备有效对象的方法

大型项目的设计模式依赖于python提供的构造函数功能。没有这个,它们将无法运行,

例如

  • 你想要跟踪为类创建的每个对象,现在你需要一个每次创建对象时执行的方法,因此构造函数

  • 构造函数的另一个有用示例是假设您要为 Bank 创建一个 customer 对象。现在银行的客户必须有一个account number,所以基本上你必须为银行的有效客户对象设置一个规则,因此构造函数。

最新更新