了解 __init__()
example
class Student(object):
def __init__(self, something): # 在实例化类时,被调用
print("Init called.")
self.something = something
def method(self):
return self.something
my_object = Student('Jetty')
'''
D:\projects\pythoncode\pythonparallel
(pythonparallel-jU7W1wcf) λ python pysuperdemo.py
Init called.
D:\projects\pythoncode\pythonparallel
当创建一个新的 python类实例时, `__init__()` 会被调用,事实证明这是一个非常好的地方,我们可以在对象创建后对其进行修改。
在上面的代码片段中,当我们用'Jetty'(实际上可能是任何东西)调用Student时,它会作为参数Jetty传递给__init__函数。 我们现在尝试运行此脚本。
<a name="oAlQN"></a>
## `__init__()` 是构造函数吗?
确实是的。init是一个oop构造。init是类的构造函数。正如上面提到的,一旦分配了对象的内存,就会调用init方法。让我们看看我们在上面的代码片段中做了什么
```python
def __init__(self, something):
self.something = something
使用 self 很重要,因为如果你不这么做
def __init__(self, something):
_something = something
something 参数被保存在 stack中,超出 __init__()
的scope范围将被丢弃。
__init__()
在继承中
当我们有一个继承自超类的类时,init方法以同样的方式工作。
class User(object):
def __init__(self, something):
print("User Init called.")
self.something = something
def method(self):
return self.something
class Student(User):
def __init__(self, something):
User.__init__(self, something)
print("Student Init called.")
self.something = something
def method(self):
return self.something
my_object = Student('Jetty')
'''
D:\projects\pythoncode\pythonparallel
(pythonparallel-jU7W1wcf) λ python pysuperdemo.py
User Init called.
Student Init called.
D:\projects\pythoncode\pythonparallel
```
因此,在子类之前,父类的init被调用。您可以通过修改父类或子类调用init的顺序来控制这一点。阅读更多关于python继承的内容。
总结
总而言之,python的 __init__()
就是其他OOP语言(如C ++和Java)中的构造函数。 这背后的基本思想是,它是一种特殊的方法,在创建该类的对象时自动调用。