面向对象与继承面向对象思想有三大要素:
- 继承
- 封装
- 多态
- 它可以使用现有类的所有功能,并在无需重新编写原来类的情况下,对这些功能进行扩展
- 通过继承创建的新类被称为 “子类” 或 “派生类”,被继承的类被称为 “基类”、“父类” 或 “超类”
- 在 Python/ target=_blank class=infotextkey>Python 中,同时支持单继承与多继承
class Pig:def __init__(self, name, age):self.name = nameself.age = agedef bark(self):print('叫')def eat(self):print('吃')class Dog:def __init__(self, name, age):self.name = nameself.age = agedef bark(self):print('叫')def guarding(self):print('看家')class Cat:def __init__(self, name, age):self.name = nameself.age = agedef bark(self):print('叫')def catch(self):print('抓老鼠')我们发现,虽然实现了需求,但是我们看到,这里面出现了大量的重复代码 。如果我们能将这些重复代码封装起来,比如封装到一个动物类中,然后猪、狗和猫分别都继承这个动物类,就可以让代码更加简洁 。具体的实现方法为:
class Animal:def __init__(self, name, age):self.name = nameself.age = agedef bark(self):print('叫')class Pig(Animal):def eat(self):print('吃')class Dog(Animal):def guarding(self):print('看家')class Cat(Animal):def catch(self):print('抓老鼠')mimi = Cat('咪咪', 3)print(mimi.name, mimi.age)mimi.bark()mimi.catch()输出的结果为:咪咪 3叫抓老鼠实现继承之后,子类将继承父类的属性和方法 。不难看出,继承关系的特点为:
- 增加了类的耦合性(耦合性不宜多,宜精)
- 减少了重复代码
- 使得代码更加规范化,合理化
- 组合
- 组合是指在新类里面创建原有类的对象,重复利用已有类的功能,是 has-a 的关系(如:猫有腿)
- 原来类的对象作为整体,以新类的属性的形式存在
- 继承
- 继承允许设计人员根据其他类的实现来定义一个类的实现,是 is-a 的关系(如:猫是动物)
- 子类可以直接使用父类中的属性和方法,就好像父类的属性和方法已经存在于子类中了一样
继承虽然很好用,但是不能滥用,像之前说的,耦合程度不宜过高,否则逻辑会十分混乱:
- 不要轻易地使用继承,除非两个类之间是 is-a 关系
- 不要单纯地为了实现代码的重用而使用继承,因为过多的继承会破坏代码的可维护性,当父类被修改的时候,会影响到所有继承自它的子类,从而增加程序的维护难度与成本
- 总结起来就是:组装的时候使用组合,扩展的时候使用继承
isinstance和issubclassisinstance:
- 用于检查实例类型
- isinstance(对象, 类),用来判断对象是不是该类的实例对象
- 用于检查类继承
- issubclass(类1, 类2),用来判断类 1 是否是类 2 的子类
print(isinstance(10, int))输出的结果为: True重写父类方法如果父类中的方法在子类中不适用,我们可以对其进行重写:class Animal:def __init__(self, name, age):self.name = nameself.age = agedef bark(self):print('叫')class Dog(Animal):def bark(self):# 重写叫的方法print('汪汪汪!')def guarding(self):print('看家')wangwang = Dog('汪汪', 3)print(wangwang.name)wangwang.bark()
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- python中模块与包
- 跨平台Python异步聊天机器人框架,支持QQ、飞书、钉钉等渠道
- 4 步打包一个新的 Python 模块
- 什么是地震预警?手机如何实现地震预警功能?专家解读
- 汪圆圆|香港第一好命儿媳汪圆圆,模特嫁入百亿豪门,3年生3娃掌握继承权
- 何超云|真爱,父亲是千亿富豪,何超云未来可继承几十亿,却选择嫁给消防队长
- 成吉思汗到忽必烈怎么继承的?世界上成吉思汗的儿子忽必烈
- 孙策为什么把位置传给孙权?孙权是什么时候继承孙策的位置
- 康熙属意谁继承皇位?康熙让哪个儿子继位
- 编程|胡渊鸣:import一个“太极”库 让Python代码提速100倍!
