了解 __init__()

example

  1. class Student(object):
  2. def __init__(self, something): # 在实例化类时,被调用
  3. print("Init called.")
  4. self.something = something
  5. def method(self):
  6. return self.something
  7. my_object = Student('Jetty')
  8. '''
  9. D:\projects\pythoncode\pythonparallel
  10. (pythonparallel-jU7W1wcf) λ python pysuperdemo.py
  11. Init called.
  12. D:\projects\pythoncode\pythonparallel
  1. 当创建一个新的 python类实例时, `__init__()` 会被调用,事实证明这是一个非常好的地方,我们可以在对象创建后对其进行修改。
  2. 在上面的代码片段中,当我们用'Jetty'(实际上可能是任何东西)调用Student时,它会作为参数Jetty传递给__init__函数。 我们现在尝试运行此脚本。
  3. <a name="oAlQN"></a>
  4. ## `__init__()` 是构造函数吗?
  5. 确实是的。init是一个oop构造。init是类的构造函数。正如上面提到的,一旦分配了对象的内存,就会调用init方法。让我们看看我们在上面的代码片段中做了什么
  6. ```python
  7. def __init__(self, something):
  8. self.something = something

使用 self 很重要,因为如果你不这么做

  1. def __init__(self, something):
  2. _something = something

something 参数被保存在 stack中,超出 __init__() 的scope范围将被丢弃。

__init__()在继承中

当我们有一个继承自超类的类时,init方法以同样的方式工作。

  1. class User(object):
  2. def __init__(self, something):
  3. print("User Init called.")
  4. self.something = something
  5. def method(self):
  6. return self.something
  7. class Student(User):
  8. def __init__(self, something):
  9. User.__init__(self, something)
  10. print("Student Init called.")
  11. self.something = something
  12. def method(self):
  13. return self.something
  14. my_object = Student('Jetty')
  15. '''
  16. D:\projects\pythoncode\pythonparallel
  17. (pythonparallel-jU7W1wcf) λ python pysuperdemo.py
  18. User Init called.
  19. Student Init called.
  20. D:\projects\pythoncode\pythonparallel

```

因此,在子类之前,父类的init被调用。您可以通过修改父类或子类调用init的顺序来控制这一点。阅读更多关于python继承的内容。

总结

总而言之,python的 __init__() 就是其他OOP语言(如C ++和Java)中的构造函数。 这背后的基本思想是,它是一种特殊的方法,在创建该类的对象时自动调用。

参考

https://www.journaldev.com/18397/python-class-init