def __init__
时间: 2023-10-08 07:13:37 浏览: 63
`__init__` 是 Python 中的一个特殊方法,用于对象的初始化。当一个类的实例被创建时,`__init__` 方法会自动被调用。
在 `__init__` 方法中,我们可以对对象的属性进行初始化,也可以执行其他的一些操作。例如:
```python
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def say_hello(self):
print(f"Hello, my name is {self.name} and I am {self.age} years old.")
person = Person("Alice", 25)
person.say_hello() # 输出 "Hello, my name is Alice and I am 25 years old."
```
在上面的例子中,`Person` 类有两个属性 `name` 和 `age`,在 `__init__` 方法中对这两个属性进行了初始化。在创建 `person` 对象时,传入了 `name` 和 `age` 参数,这些参数被用于初始化对象的属性。最后调用 `say_hello` 方法,输出对象的属性值。
相关问题
class A: def __new__(self): self.__init__(self) print("A's __new__() invoked") def __init__(self): print("A's __init__() invoked") class B(A): def __new__(self): print("B's __new__() invoked") def __init__(s
elf):
print("B's __init__() invoked")
b = B()
在运行这段代码时,输出的结果是:
B's __new__() invoked
A's __init__() invoked
B's __init__() invoked
这是因为在创建B类的实例b时,首先会调用B类的__new__()方法来创建实例对象,然后再调用实例对象的__init__()方法来初始化实例。由于B类没有定义__new__()方法,所以调用的是其父类A的__new__()方法。在A的__new__()方法中,首先调用了A的__init__()方法,然后输出"A's __new__() invoked"。接着返回一个A类的实例对象,这个实例对象会被传递给B类的__init__()方法,用于初始化B类的实例。因此,输出的结果是"B's __new__() invoked"、"A's __init__() invoked"和"B's __init__() invoked"。
class Base(object): def __init__(self): print("enter Base") print("leave Base") class A(Base): def __init__(self): print("enter A") super().__init__() print("leave A") class B(Base): def __init__(self): print("enter B") super().__init__() print("leave B") class C(A, B): def __init__(self): print("enter C") super().__init__() print("leave C") c = C()
这是一个 Python 的多重继承示例,其中定义了 Base、A、B 和 C 四个类。Base 是一个基类,A 和 B 都继承自 Base,而 C 继承自 A 和 B 两个类。在 C 的构造函数中,通过 super() 调用了 A、B、Base 三个类的构造函数,并分别打印出了相应的信息。
当创建 C 的实例 c 时,会依次调用 A、B、Base 三个类的构造函数,并打印出如下信息:
enter C
enter A
enter B
enter Base
leave Base
leave B
leave A
leave C
可以看出,构造函数的调用顺序是按照类的继承顺序,从左到右、从下到上的顺序进行的。这种调用方式被称为 C3 线性化算法,它可以解决多重继承时的方法调用顺序的问题。
阅读全文