下面我将详细讲解一下 "python中super().init()作用详解" 的相关知识。
什么是super().init()方法?
在Python中,当我们定义一个子类(派生类)时,如果需要对其父类(基类)的属性或方法进行调用,我们通常使用 super()
函数。super()
函数返回一个临时的对象,通过该对象可以调用父类中的方法。
而对于 super().__init__()
方法,它是直接调用父类的 __init__()
方法,用于初始化父类的属性。在子类中使用 super().__init__()
方法会先执行父类的构造方法,然后再执行子类的构造方法。
super().init() 的作用
当我们在子类中定义了 __init__()
方法时,如果需要修改父类中的属性的值或调用父类中的其他方法,就需要使用 super().__init__()
方法来调用父类的构造方法。
具体来说,使用 super().__init__()
方法的作用有以下几种:
- 初始化父类的属性
通过super().__init__()
方法,可以调用父类的构造方法,初始化父类的属性。例如,在下面的示例代码中,子类B
继承于父类A
,并在__init__()
方法中调用了super().__init__(x)
方法,给父类A
的属性self.x
赋值。
```python
class A:
def init(self, x):
self.x = x
class B(A):
def init(self, x, y):
super().init(x)
self.y = y
b = B(1, 2)
print(b.x) # 输出 1
```
- 调用父类的方法
通过super().__init__()
方法,我们还可以调用父类中的其他方法。例如,在下面的示例代码中,子类B
继承于父类A
,并在__init__()
方法中调用了父类A
的方法foo()
。
```python
class A:
def foo(self):
print('foo from A')
class B(A):
def init(self, x):
super().init()
self.x = x
def foo(self):
print('foo from B')
b = B(1)
b.foo() # 输出 "foo from B"
super(B, b).foo() # 输出 "foo from A"
```
其中,通过 super(B, b)
获取到了 B
的父类,即 A
,然后调用了 foo()
方法。
示例说明
为了更加深入地理解 super().__init__()
方法,我们来看两个更加具体的示例。
示例一
假设我们需要定义一个 Square
类来表示正方形,我们知道正方形的周长和面积的计算公式分别是:
- 周长 = 4 * a
- 面积 = a * a
其中,a
为正方形的边长。我们可以定义 Square
类如下:
class Square:
def __init__(self, a):
self.a = a
def perimeter(self):
return 4 * self.a
def area(self):
return self.a * self.a
其中,__init__()
方法用于初始化正方形的边长,perimeter()
方法用于计算正方形的周长,area()
方法用于计算正方形的面积。
现在,我们需要定义一个 ColorSquare
类,继承 Square
类,并在此基础上新增一个属性 color
来表示正方形的颜色。我们可以定义 ColorSquare
类如下:
class ColorSquare(Square):
def __init__(self, a, color):
self.color = color
super().__init__(a)
def __str__(self):
return f"边长为 {self.a} 的 {self.color} 正方形"
在上面的示例代码中,我们新增了 __str__()
方法用于打印正方形的边长和颜色信息。在 __init__()
方法中,我们使用了 super().__init__(a)
方法来初始化父类 Square
中的属性 self.a
,并新增了属性 self.color
。
使用 ColorSquare
类,我们可以创建一个红色的正方形对象,并输出其信息:
cs = ColorSquare(5, 'red')
print(cs) # 输出 "边长为 5 的 red 正方形"
print(cs.perimeter()) # 输出 20
print(cs.area()) # 输出 25
示例二
假设我们需要定义一个 Animal
类来表示动物,其中 __init__()
方法用于初始化动物的属性(如年龄、性别等),run()
方法用于打印动物的奔跑信息。我们可以定义 Animal
类如下:
class Animal:
def __init__(self, age, gender):
self.age = age
self.gender = gender
def run(self):
print('动物开始奔跑')
现在,我们需要定义两个子类 Cat
和 Dog
,分别继承 Animal
类,并增加它们独有的方法(如 meow()
和 bark()
)。我们可以定义 Cat
和 Dog
类如下:
class Cat(Animal):
def meow(self):
print('猫喵喵叫')
def run(self):
print('猫突然加速')
class Dog(Animal):
def bark(self):
print('狗汪汪叫')
def run(self):
print('狗疯狂奔跑')
在上面的示例代码中,Cat
和 Dog
类分别继承于父类 Animal
,并分别增加了 meow()
和 bark()
方法。同时,Cat
和 Dog
类中还重写了父类 Animal
中的 run()
方法。
使用 Cat
类和 Dog
类,我们可以创建一个猫对象和一个狗对象,并分别调用它们的方法:
c = Cat(2, 'male')
c.run() # 输出 "猫突然加速"
c.meow() # 输出 "猫喵喵叫"
d = Dog(3, 'female')
d.run() # 输出 "狗疯狂奔跑"
d.bark() # 输出 "狗汪汪叫"
super(Cat, c).run() # 输出 "动物开始奔跑"
其中,通过 super(Cat, c).run()
这样的方式,我们可以调用父类 Animal
中的 run()
方法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python中super().__init__()作用详解 - Python技术站