文档章节

Python中学习多重继承和类的属性的一个有趣的实例【2017.02.25】

睿松
 睿松
发布于 2017/02/25 15:44
字数 762
阅读 523
收藏 0

类的属性 

Python语言中的类的属性有2种:

  1. 实例属性
  2. 类属性

两类属性的区别在于:

  1. 实例属性即同一个类的不同实例,其值并不关联和影响。
  2. 类属性名是同一个类的实例所共有的,在类中直接定义,引用时用 类名.类变量名 形式,对该属性的修改会影响该类的所有实例。

类的继承

继承可以减少代码,增加灵活性。子类继承父类之后,就具有了父类中除了私有属性和私有方法外的其他属性和方法。而Python不同于其他语言,允许多重继承。

各类参考书中对类的特性的讲述和实例不少,本实例意在让大家体会下上述两个知识点,以免在遇到如上使用方法时有所困惑。

'''
此程序的知识点:
1.类的属性和实例属性的概念,namea和nameb为类属性,
在实例化的过程如改变其值,在下次实例化中,其属性将
为新值。

2.多重继承中继承顺序很重要,若继承的多个父类中有相同
的方法名,但在使用中未指定父类名,则Python解释器按照
从左到右搜索,即调用先继承勒种的同名方法。
'''

class PrntA:
    namea='PrntA'
    def set_value(self,a):
        self.a=a
    def set_namea(self,namea):
        prntA.namea=namea
    def info(self):
        print('打印A类信息:%s,%s'%(PrntA.namea,self.a))
class PrntB:
    nameb='PrntB'
    def set_nameb(self,nameb):
        PrntB.nameb=nameb
    def info(self):
        print('打印B类信息:%s'%(PrntB.nameb,))
class Sub(PrntA,PrntB):
    pass
class Sub2(PrntB,PrntA):
    pass
class Sub3(PrntA,PrntB):
    def info(self):
        PrntA.info(self) #注释
        PrntB.info(self) #注释
print('使用第一个sub class:')
sub=Sub()
sub.set_value('CLASSA1')
sub.info()
sub.set_nameb('CLASSB1')
sub.info()
print('*****华丽分割线*****')
print('使用第二个sub class:')
sub2=Sub2()
sub2.set_value('CLASSA2')
sub2.info()
sub2.set_nameb('CLASSB2')
sub2.info()
print('*****华丽分割线*****')
print('使用第三个sub class:')
sub3=Sub3()
sub3.set_value('CLASSA3')
sub3.info()
sub3.set_nameb('CLASSB3')
sub3.info()

运行结果

============== RESTART: C:/Users/Administrator/Desktop/HAHHA.py ==============
使用第一个sub class:
打印A类信息:PrntA,CLASSA1
打印A类信息:PrntA,CLASSA1
*****华丽分割线*****
使用第二个sub class:
打印B类信息:CLASSB1
打印B类信息:CLASSB2
*****华丽分割线*****
使用第三个sub class:
打印A类信息:PrntA,CLASSA3
打印B类信息:CLASSB2
打印A类信息:PrntA,CLASSA3
打印B类信息:CLASSB3

怎么样,考虑到上述的知识点,结果跟你们想象的有没有什么不一样呢?

© 著作权归作者所有

睿松
粉丝 0
博文 15
码字总数 4524
作品 0
海淀
程序员
私信 提问
加载中

评论(0)

Python学习之面向对象高级编程

数据封装、继承和多态只是面向对象程序设计中最基础的3个概念。在Python中,面向对象还有很多高级特性,如:多重继承、定制类、元类等概念。 slots 作用:限制实例的属性。 Python允许在定义...

stone_zhu
2018/06/19
0
0
通过 Python 理解 Mixin 概念 - 知乎

Mixin 的概念 Mixin 即 ,常被译为“混入”,是一种编程模式,在 Python 等面向对象语言中,通常它是实现了某种功能单元的类,用于被其他子类继承,将功能组合到子类中。 利用 Python 的多重...

Python 大法
2019/12/12
0
0
Python - 进阶(持续更新 ing)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/qq39437555/article/details/93867588 文章目录 Python - 面向对象 ...

桃子味儿的汽水~
2019/08/23
0
0
Python学习总结(四):面向对象编程,转换思维

从这节开始,我们将要接触编程思想——面向对象编程,很重要!!!学过C或者Java都知道,不管是面向过程还是面向对象,想要彻底掌握,必须理解这种程序设计思想,这样才能熟练的编程,而不是...

海岸线的曙光
2018/01/24
196
0
Python学习笔记-面向对象篇

定义 实例化和调用 访问限制 双下划线: 私有变量(解释器把双下划线改成了单下划线,依旧可以通过单下划线访问) 单下划线: 可以被外部访问,但约定俗称不要访问 双下划线包围: 特殊变量,...

路小磊
2015/07/23
133
0

没有更多内容

加载失败,请刷新页面

加载更多

郑州开纸制品发票

郑州开纸制品发票【132 * 50 52 * 90 89】罗生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridg...

zhangyongli
今天
65
0
OSChina 周四乱弹 —— 失业后的阳光太刺眼了

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @大又 :分享Jack Stauber的单曲《Fighter》 《Fighter》- Jack Stauber 手机党少年们想听歌,请使劲儿戳(这里) @theLovelyBugfly :笑死我...

小小编辑
今天
142
0
手把手教你搭建 ELK 实时日志分析平台

本篇文章主要是手把手教你搭建 ELK 实时日志分析平台,那么,ELK 到底是什么呢? ELK 是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash 和 Kibana。 Elasticsearch ...

武培轩
今天
86
0
直播报名 | Service Mesh技术实践分享

近年来,云原生(Cloud Native)逐渐成为一个技术领域内的流行语,热度居高不下。企业正在加速拥抱云原生架构,以此缩短产品发布周期、敏捷响应市场需求,继而从云计算服务中提炼新的价值和技...

百度开发者中心
今天
97
0
Qt 实现QTableView单元格多按钮效果

实现效果预览: 思路: 使用Qt的委托类独自渲染表格的某一列,如上图字段2的那一列。该一个单元格放入多个按钮,重写 QStyledItemDelegate 委托类 paint 方法即可实现上图效果。 代码: 委托...

剑是SR剑
今天
99
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部