文档章节

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

睿松
 睿松
发布于 2017/02/25 15:44
字数 762
阅读 89
收藏 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
博文 14
码字总数 4038
作品 0
海淀
程序员
Python学习之面向对象高级编程

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

stone_zhu
06/19
0
0
Python学习总结(四):面向对象编程,转换思维

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

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

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

路小磊
2015/07/23
0
0
Python是面向对象的语言吗?python编程

  Python虽然是解释型语言,但从设计之初就已经是一门面向对象的语言,对于Python来说一切皆为对象。正因为如此,在Python中创建一个类和对象是很容易的,当然如果习惯面向过程或者函数的写...

老男孩Linux培训
06/08
0
0
Python基础总结成千行代码,让Python入门更简单!

只要学会这千行代码,不管你是零基础还是弱基础或是没有接触过编程,都可以快速入门Python!当时我就不信邪啊,等我看完之后,即使作为一个Python老鸟了,还是领会到了很多教授他的独特见解!...

糖宝lsh
09/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

df和du命令 磁盘分区

9月25日任务 4.1 df命令 4.2 du命令 4.3/4.4 磁盘分区 df 命令 查看系统磁盘空间使用情况 常用参数 -h (human-readble) # 人性化的为空间大小转换单位显示[root@centos7 ~]# df -h文件系...

robertt15
15分钟前
0
0
【a&sAI创新】华为CloudIVS轻量云:借力打力,四两拨千斤

[摘要] 1、测评表现就目前来说,AI的门槛还是比较高的,业内所熟知的算法企业,为了追求算法的极致,比如人脸识别公司,仍在不断扩大研发...   1、测评表现   就目前来说,AI的门槛还是比...

yizhichao
31分钟前
1
0
安卓安装APK报错error: INSTALL_FAILED_UPDATE_INCOMPATIBLE

记录一个 DELETE_FAILED_INTERNAL_ERROR Error while Installing APK问题 之前遇到这个问题 方案1 将data/data/目录下该应用的包名的目录删除掉,如:adb shell rm -rf data/data/com.demo.h...

切切歆语
32分钟前
0
0
用网关zuul时,熔断hytrix里面的坑

1,zuul 默认的隔离级别是信号量,默认最大隔离信号量是100 信号量隔离和线程池隔离的区别如下: https://my.oschina.net/u/867417/blog/2120713 默认设置: 2,zuul里隔离是按服务隔离的,也...

爱吃大肉包
32分钟前
0
0
使用SSM+Solr优雅的实现电商项目中的搜索功能

在学习了Redis&Spring-Data-Redis入门和Solr&Spring-Data-Solr入门后,接下来就该是项目实战了。这次我们用Vue.JS和ElementUI写前端页面,优雅的整合SSM-Shiro-Redis-Solr框架。 手摸手教你优...

TyCoding
32分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部