Python - 面向对象编程 - 子类方法的重写

简介: Python - 面向对象编程 - 子类方法的重写

继承的详解


https://www.cnblogs.com/poloyy/p/15216652.html

 

方法的重写


  • 在子类继承父类时,子类会拥有父类的所有属性和方法
  • 但当父类的方法实现不满足子类需要时,子类可以对方法进行重写,也叫 override

 

重写父类方法的两种情况

  • 覆盖父类的方法
  • 对父类方法进行扩展

 

方法重写的类图


image.png

Chai 类继承了 Dog 类,重写了 wang 方法

 

覆盖父类的方法


  • 在开发中,父类的方法和子类的方法功能不同,就可以使用覆盖的方式,在子类中重新编写父类的方法
  • 相当于在子类中定义一个和父类同名的方法并且实现子类特有的功能
  • 重写后,在运行时,只会调用子类中重写的方法,而不再会调用父类封装的方法

 

实际代码

class Animal:
    def eat(self):
        print("吃东西...")
    def drink(self):
        print("喝水...")
    def run(self):
        print("跑步...")
class Dog(Animal):
    def wang(self):
        print("汪汪叫...")
class Chai(Dog):
    def shake(self):
        print("小柴柴摇尾巴...")
    def wang(self):
        print("柴犬小声的汪汪叫")
chai = Chai()
chai.wang()
# 输出结果
柴犬小声的汪汪叫


子类实例方法调用的是子类的 wang 方法,而不是父类的 wang 方法

 

对父类方法进行扩展


在开发中,子类的方法实现需要包含父类的方法,就可以使用扩展方式

 

如何扩展

  1. 在子类中重写父类的方法
  2. 在子类方法需要调用父类方法的地方,通过 super().父类方法 类执行父类方法
  3. 代码其他的位置可以针对子类的需求,编写子类特有的代码

super() 详解:https://www.cnblogs.com/poloyy/p/15223443.html

 

实际代码


class Animal:
    def eat(self):
        print("吃东西...")
    def drink(self):
        print("喝水...")
    def run(self):
        print("跑步...")
class Dog(Animal):
    def wang(self):
        print("汪汪叫...")
class Chai(Dog):
    def shake(self):
        print("小柴柴摇尾巴...")
    def wang(self):
        # 1、针对子类特有的需求,编写子类独有的代码实现
        print("柴犬小声的汪汪叫")
        # 2、调用父类方法
        super().wang()
        # 3、子类的其他代码块
        print("柴犬真可爱")
chai = Chai()
chai.wang()
# 输出结果
柴犬小声的汪汪叫
汪汪叫...
柴犬真可爱
相关文章
|
4天前
|
Python
python魔法方法如何应用
这个Python示例展示了类继承和方法重写。`Student`类继承自`Person`,并覆盖了`say_hello`方法。通过`super().__init__(name)`调用父类的`__init__`初始化`name`属性,`Student`添加了`age`属性,并在重写的`say_hello`中使用。创建`Student`实例`student`并调用其`say_hello`,输出定制的问候信息。
15 1
|
27天前
|
存储 并行计算 Java
Python读取.nc文件的方法与技术详解
本文介绍了Python中读取.nc(NetCDF)文件的两种方法:使用netCDF4和xarray库。netCDF4库通过`Dataset`函数打开文件,`variables`属性获取变量,再通过字典键读取数据。xarray库利用`open_dataset`打开文件,直接通过变量名访问数据。文中还涉及性能优化,如分块读取、使用Dask进行并行计算以及仅加载所需变量。注意文件路径、变量命名和数据类型,读取后记得关闭文件(netCDF4需显式关闭)。随着科学数据的增长,掌握高效处理.nc文件的技能至关重要。
86 0
|
27天前
|
数据处理 Python
python进行二进制数据处理的方法
python进行二进制数据处理的方法
15 0
|
5天前
|
机器学习/深度学习 人工智能 算法
|
5天前
|
安全 Python
python字典的内置方法
Python字典主要方法包括:`keys()`(返回所有键)、`values()`(返回所有值)、`items()`(返回所有键值对)、`get()`(安全取值,键不存在时返回默认值)、`setdefault()`(设置默认值)、`update()`(合并字典)、`pop()`(删除并返回值)、`clear()`(清空字典)、`copy()`(浅拷贝)、`fromkeys()`(新建字典并设置默认值)、`popitem()`(随机删除键值对)。
6 0
|
9天前
|
Python
Python面向对象编程学习应用案例详解
面向对象编程在Python中通过类定义对象结构和行为。示例:1) 使用`class`关键字定义类,如`class Person`;2) `__init__`方法初始化对象属性,如`self.name`和`self.age`;3) 实例化对象,如`person1 = Person("张三", 25)`;4) 访问属性和方法,如`person1.name`;5) 定义类方法,如`def introduce(self)`;6) 调用方法,如`person1.introduce()`;7) 类继承,如`class Student(Person)`;8) 多态,通过继承重写方法实现。
9 1
|
14天前
|
存储 Python
python基础篇: 详解 Python 字典类型内置方法
python基础篇: 详解 Python 字典类型内置方法
25 1
|
16天前
|
Java 测试技术 Python
Python开启线程和线程池的方法
Python开启线程和线程池的方法
12 0
Python开启线程和线程池的方法
|
18天前
|
算法 Python
数据结构与算法 经典排序方法(Python)
数据结构与算法 经典排序方法(Python)
23 0
|
21天前
|
Python
Python random模块(获取随机数)常用方法和使用例子
`random`模块在Python中用于生成随机数。
19 0