文章目录
一、子类重写父类成员
1、子类重写父类成员语法
子类 继承 父类的 成员属性 与 成员方法 后 , 如果对 继承的 父类成员 不满意 , 可以 重写 父类成员 ;
成员 属性 和 成员 方法 , 都可以进行重写 ;
- 成员属性 重写 , 就是在 子类中 , 修改 成员属性的值 ;
- 成员方法 重写 , 就是在 子类中 , 修改 成员方法的方法体内容 ;
在子类中 , 如果需要重写父类的成员 , 直接在子类中 , 重新定义父类的成员即可 ;
在 Python 中 , 不像 Java / Kotlin / Groovy 一样 , 如果子类重写父类成员 , 需要使用 @Override 注解 修饰 ;
2、代码示例 - 子类重写父类成员
在父类 Animal 中 , 定义了
- 成员属性 name 和 age ,
- 成员方法 make_sound 函数 ;
在子类 Dog 中 , 对 父类 Animal 的 成员属性 name 和 age 和 make_sound 成员方法 不满意 , 需要重写两个成员 ,
子类 重写 父类成员 , 只需要 将 父类的成员 , 按照相同的格式 , 重新定义一遍即可 ;
代码示例 :
"""
面向对象 - 继承
"""
class Animal:
name = "Animal"
age = 0
def make_sound(self):
print("动物发音")
class Dog(Animal):
name = "狗" # 重写父类属性
age = 10
def make_sound(self): # 重写父类方法
print("汪汪")
animal = Animal()
print(f"{animal.name} : {animal.age}")
animal.make_sound()
print("")
dog = Dog()
print(f"{dog.name} : {dog.age}")
dog.make_sound()
执行结果 :
Y:\002_WorkSpace\PycharmProjects\pythonProject\venv\Scripts\python.exe Y:/002_WorkSpace/PycharmProjects/HelloPython/hello.py
Animal : 0
动物发音
狗 : 10
汪汪
Process finished with exit code 0
二、子类调用父类重名成员
1、子类调用父类重名成员语法
在 外部 是无法访问 父类成员 : 子类 重写 父类 成员后 , 通过 子类 实例对象 调用 该 重写后的 成员时 , 默认调用的就是 重写后的成员 ;
在 子类内部 可以 访问父类成员 : 如果需要调用被重写之前的 父类成员 , 则需要使用如下方法 :
-
方法一 : 使用 父类类名 调用父类成员 ;
- 调用父类同名成员变量 :
父类类名.成员变量名
- 调用父类同名成员方法 :
父类类名.成员方法名(self)
- 调用父类同名成员变量 :
-
方法二 : 使用 super 调用父类成员 ;
- 调用父类同名成员变量 :
super().成员变量名
- 调用父类同名成员方法 :
super().成员方法名()
- 调用父类同名成员变量 :
2、代码示例 - 子类中使用 父类类名 调用父类成员
在 Dog 子类中的 make_sound 函数中 ,
- 通过
Animal.name
和Animal.age
可以调用父类的成员变量 , 打印出来的值为父类的成员变量值 ; - 通过
Animal.make_sound(self)
可以调用父类的 成员方法 ;
注意 : 调用 父类 成员方法时 , 需要带参数 self ;
完整代码示例 :
"""
面向对象 - 继承
"""
class Animal:
name = "Animal"
age = 0
def make_sound(self):
print("动物发音")
class Dog(Animal):
name = "狗" # 重写父类属性
age = 10
def make_sound(self): # 重写父类方法
print("汪汪")
print(f"{Animal.name} : {Animal.age}")
Animal.make_sound(self)
animal = Animal()
print(f"{animal.name} : {animal.age}")
animal.make_sound()
print("")
dog = Dog()
print(f"{dog.name} : {dog.age}")
dog.make_sound()
执行结果 :
Y:\002_WorkSpace\PycharmProjects\pythonProject\venv\Scripts\python.exe Y:/002_WorkSpace/PycharmProjects/HelloPython/hello.py
Animal : 0
动物发音
狗 : 10
汪汪
Animal : 0
动物发音
Process finished with exit code 0
3、代码示例 - 子类中使用 super 调用父类成员
在 Dog 子类中的 make_sound 函数中 ,
- 通过
super().name
和super().age
可以调用父类的成员变量 , 打印出来的值为父类的成员变量值 ; - 通过
super().make_sound()
可以调用父类的 成员方法 ;
注意 : 调用 父类 成员方法时 , 不带参数 self ;
完整代码示例 :
"""
面向对象 - 继承
"""
class Animal:
name = "Animal"
age = 0
def make_sound(self):
print("动物发音")
class Dog(Animal):
name = "狗" # 重写父类属性
age = 10
def make_sound(self): # 重写父类方法
print("汪汪")
print(f"{super().name} : {super().age}")
super().make_sound()
animal = Animal()
print(f"{animal.name} : {animal.age}")
animal.make_sound()
print("")
dog = Dog()
print(f"{dog.name} : {dog.age}")
dog.make_sound()
执行结果 :
Y:\002_WorkSpace\PycharmProjects\pythonProject\venv\Scripts\python.exe Y:/002_WorkSpace/PycharmProjects/HelloPython/hello.py
Animal : 0
动物发音
狗 : 10
汪汪
Animal : 0
动物发音
Process finished with exit code 0