怎样用super函数继承父类
时间: 2023-03-14 14:00:29 浏览: 61
super函数可以用来继承父类,使用方法是:super(父类名,当前类名)。例如:class SubClass(ParentClass): def __init__(self, x, y): super(SubClass, self).__init__(x, y)
相关问题
如果子类没有初始化函数,用super继承父类的初始化函数会怎么样
如果子类没有显式定义 `__init__` 方法,那么它会继承父类的 `__init__` 方法。此时,可以使用 `super()` 函数来调用父类的 `__init__` 方法,以确保父类的初始化代码得到执行。
如果子类没有定义 `__init__` 方法,Python 会自动调用父类的 `__init__` 方法,这个调用是隐式的。因此,在这种情况下,使用 `super()` 函数和不使用 `super()` 函数的效果是相同的。
例如,假设有如下的父类 `Person` 和子类 `Student`:
```python
class Person:
def __init__(self, name):
self.name = name
print("Person initialized")
class Student(Person):
pass
```
在子类 `Student` 中没有定义 `__init__` 方法,因此它会继承父类 `Person` 的 `__init__` 方法。在创建 `Student` 对象时,会自动调用 `Person` 的 `__init__` 方法,输出 `Person initialized`。
```python
>>> s = Student("Tom")
Person initialized
>>> s.name
'Tom'
```
在子类中也可以定义自己的 `__init__` 方法,此时可以使用 `super()` 函数来调用父类的 `__init__` 方法,以确保父类的初始化代码得到执行。
如果在一个函数中调用super继承父类的初始化会怎么样
如果在子类的函数中调用 `super()` 函数来继承父类的初始化函数,那么会执行父类的初始化函数。但是需要注意的是,父类的初始化函数可能会修改一些成员变量,如果子类在父类初始化函数之后对这些成员变量进行了修改,那么这些修改会覆盖父类的修改,可能会导致预期外的结果。
例如,假设有如下的父类 `Person` 和子类 `Student`:
```python
class Person:
def __init__(self, name):
self.name = name
print("Person initialized")
class Student(Person):
def __init__(self, name, grade):
super().__init__(name)
self.grade = grade
print("Student initialized")
```
在子类 `Student` 的 `__init__` 方法中,首先调用了父类 `Person` 的 `__init__` 方法,然后再初始化自己的成员变量。这里使用 `super()` 函数调用父类的 `__init__` 方法,确保父类的初始化代码得到执行。
现在,我们在子类 `Student` 中定义一个函数 `print_info`,在其中调用 `super()` 函数继承父类的初始化函数,并修改成员变量 `name` 的值:
```python
class Student(Person):
def __init__(self, name, grade):
super().__init__(name)
self.grade = grade
print("Student initialized")
def print_info(self):
super().__init__("New Name")
print("Name:", self.name, "Grade:", self.grade)
```
在函数 `print_info` 中,我们调用了 `super()` 函数继承了父类的初始化函数,并将 `name` 的值修改为 `"New Name"`。接下来,我们创建一个 `Student` 对象,并调用 `print_info` 函数:
```python
>>> s = Student("Tom", 5)
Student initialized
>>> s.print_info()
Person initialized
Name: New Name Grade: 5
```
可以看到,调用 `print_info` 函数时,会先执行父类 `Person` 的初始化函数,输出 `Person initialized`,然后将 `name` 的值修改为 `"New Name"`,最后输出修改后的 `name` 和 `grade` 的值。
需要注意的是,修改成员变量的值可能会导致一些副作用,因此在调用父类的初始化函数之后再修改成员变量的值是需要谨慎考虑的。在实际应用中,应该根据具体情况选择合适的方法来继承父类的初始化函数。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)