千家信息网

python的组合与继承举例分析

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要讲解了"python的组合与继承举例分析",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"python的组合与继承举例分析"吧!组合面向对象编
千家信息网最后更新 2026年11月03日python的组合与继承举例分析

这篇文章主要讲解了"python的组合与继承举例分析",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"python的组合与继承举例分析"吧!

组合

面向对象编程代码复用的方式除了继承还有组合,组合是指在一个类中有一部分数据是其他类的实例(对象)。

案例:

有二个类,分别是圆形、圆环,用组合的方式写。

以下是圆形类:

class Circle:pi = 3.14159265358979def __init__(self, r) -> None:self.r = r    @propertydef area(self):return self.pi*self.r**2@propertydef perimeter(self):return self.pi*self.r*2

以下是圆环类:

class Ring:def __init__(self, inner, outer):inner, outer = (inner, outer) if inner < outer else (outer, inner)self.inner = Circle(inner)self.outer = Circle(outer)@propertydef area(self):return self.outer.area-self.inner.area    @propertydef perimeter(self):return self.outer.perimeter+self.inner.perimeter

注意:

圆环类的init函数,它的参数inner和outer是圆的半径,代码块中首先判断inner和outer两个参数的大小,确保大的赋值给outer、小的赋值给inner,然后用inner和outer作参数分别调用Circle类创建inner实例和outer实例。因此创建Ring类的实例中会有2个属性是Circle类的实例。

area方法和perimeter方法中都是调用了Circle中的对应方法进行计算。

总结:

组合的方式可以提高代码复用率,将来遇到需求变更(例如更改pi的精度,只要求小数点后2位)时只需要改动少量代码,减少了出错的概率,提高了代码的可维护性。

继承

继承是一种定义类的方式,子类可以通过继承来复用父类的数据和代码块。

子类中有一项非常重要的隐藏数据--类指针,访问子类.变量(变量指向数据是它就是属性、指向代码块时它就是方法)的时候如果子类中无此变量时,解释器会通过类指针访问其父类,若父类中也无此变量时会继续向上访问祖父类,若一直访问到所有类的祖宗object类(在python中所有的类都继承自object类)时仍然找不到这个变量时,解释器就会报错。注意:类指针是单向的!意思就是子类可以访问父类的变量,而父类不能访问子类的变量。

另外:python支持多继承,而java只支持单继承。

补充:学习继承最重要的一点是搞清楚类指针、不同类的命名空间以及实例的命名空间创建、查找变量的过程,想要学明白的朋友最好是多阅读代码自己画一下内存示意图。

案例:

class Animal:kind = '动物'def __init__(self, name):self.name = namedef eat(self):print(f'{self.name}正在进食!')class Cat(Animal):def __init__(self, name, count=0):self.count = count        Animal.__init__(self, name)def mousing(self):print(f'猫咪"{self.name}"捉住了{self.count}只老鼠')white_cat = Cat('大白猫')white_cat.count += 1white_cat.mousing()white_cat.eat()print(white_cat.kind)out:猫咪"大白猫"捉住了1只老鼠大白猫正在进食!动物

讲解:

以上是一个关于继承的简单案例,接下来我通过这个案例详细梳理一下:

首先定义父类,父类是Animal,类体中有指向object类的类指针和kind属性、__init__方法和eat方法,这些是所有动物的通用属性和方法。写代码时父类代码要放在子类代码前面。

然后定义子类,定义子类Cat时将父类Animal当作参数,这就是子类继承了父类。类体中有指向Animal类的类指针、__init__方法和mousing方法,在__init__方法中初始化了count属性(抓到老鼠的数量),其余的属性则调用父类的__init__方法初始化。

接下来创建实例大白猫,创建实例时首先开辟一块命名空间,在这块内存空间中创建一个指向Cat类的类指针,然后将该内存空间的地址(该地址的名字叫self)传给Cat类的__init__方法,再创建了self.count属性,接下来调用父类的__init__方法创建了self.name属性。所以实例"大白猫"的命名空间中有:指向Cat类的类指针、name属性、count属性。

注意:实例的属性各不相同,所以属性都放在实例自己的命名空间中。一个类的所有实例调用的方法都一样,所以实例的方法都放在它们所属类的命名空间中!

感谢各位的阅读,以上就是"python的组合与继承举例分析"的内容了,经过本文的学习后,相信大家对python的组合与继承举例分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

方法 实例 属性 代码 子类 组合 变量 指针 空间 指向 就是 白猫 分析 参数 数据 方式 案例 学习 接下来 内存 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手磨咖啡 有格互联网科技 广州紫鲸互联网科技有限公司 互联网科技公司税收优惠 互联网金融科技平台 恒生科技互联网指数分析 玖二柒互联网科技公司待遇 昭通互联网科技选哪家 互联网科技人工智能实验室 河南住房之家互联网科技 用友工业互联网科技发展 保险科技服务互联网营销体系 2021互联网科技公司排名 智帮互联网科技公司最近动向 工业互联网科技成果转化 上海万顺科技互联网有限公司招聘 同城互联网络科技 陕西彩京云互联网科技有限公司 杭州科技互联网公司有哪些 伍佰万互联网科技是干嘛的 科技股互联网 成都互联网科技公司 宜安科技 互联网金融 世界互联网科技公司市值排名 岳阳华臻互联网科技有限公司 深圳市罗太互联网科技有限公司 中国新注册互联网科技 互联网的科技体现在哪里 高科技和互联网的现代国家 六子台科技互联网展会
0