文档章节

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

睿松
 睿松
发布于 2017/02/25 15:44
字数 762
阅读 89
收藏 0
点赞 0
评论 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面向对象知识点疏理

面向对象技术简介 类: 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 类变量:类变量在整个实例化的对象中是公用的。类变量定义...

乐乎无趣
2017/11/03
0
0
四Python对象和面向对象(一)

1.使用from module import导入模块 Python有两种导入模块的方法,两种都有用,一种前面已经介绍过了为:import module;第二种导入的基本语法为:from module import attr,和第一种的一个重...

dkz
2013/02/20
0
0
学习笔记(11月06日) --类

四周一次课(11月6日) 一、类的一般形式 创建类我们一般用class关键字来创建一个类,class后面跟类名字,可以自定义,最后以冒号结尾,如下所示: class ClassName: '''类的说明''' 类的内容...

wanyang_wanyang
06/26
0
0
Python面向对象编程之我见

面向对象基本概念 面向对象是一种编程范式。范式是指一组方法论。编程范式是一组如何组织代码的方法论。编程范式指的是软件工程中的一种方法学。 一些主流的编程范式: OOP - 面向对象编程 ...

bigstone2012
06/29
0
0
Python学习日记七(面向对象,继承)

一.面向对象 1 .类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对 象所共有的属性和方法。对象是类的实例。 类变量:类变量在整个实例化的对象中是公用的。类变...

HaleyLiu
04/12
0
0
《Head First Python》笔记 第六章 定制数据对象

Custom Data Objects: Bundling code with Data 将要处理的数据如下: 第一个逗号前为姓名,第二个为生日,后面为时间,目的:抽取3个最快时间。 用前面章节的内容实现: ![在此输入图片描述...

豆仔
2013/04/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

about git flow

  昨天元芳做了git分支管理规范的分享,为了拓展大家关于git分支的认知,这里我特意再分享这两个关于git flow的链接,大家可以看一下。 Git 工作流程 Git分支管理策略   git flow本质上是...

qwfys
今天
2
0
Linux系统日志文件

/var/log/messages linux系统总日志 /etc/logrotate.conf 日志切割配置文件 参考https://my.oschina.net/u/2000675/blog/908189 dmesg命令 dmesg’命令显示linux内核的环形缓冲区信息,我们可...

chencheng-linux
今天
1
0
MacOS下给树莓派安装Raspbian系统

下载镜像 前往 树莓派官网 下载镜像。 点击 最新版Raspbian 下载最新版镜像。 下载后请,通过 访达 双击解压,或通过 unzip 命令解压。 检查下载的文件 ls -lh -rw-r--r-- 1 dingdayu s...

dingdayu
今天
1
0
spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

北岩
今天
2
0
告警系统邮件引擎、运行告警系统

告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

Zhouliang6
今天
1
0
Java工具类—随机数

Java中常用的生成随机数有Math.random()方法及java.util.Random类.但他们生成的随机数都是伪随机的. Math.radom()方法 在jdk1.8的Math类中可以看到,Math.random()方法实际上就是调用Random类...

PrivateO2
今天
2
0
关于java内存模型、并发编程的好文

Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在...

DannyCoder
昨天
1
0
dubbo @Reference retries 重试次数 一个坑

在代码一中设置 成retries=0,也就是调用超时不用重试,结果DEBUG的时候总是重试,不是0吗,0就不用重试啊。为什么还是调用了多次呢? 结果在网上看到 这篇文章才明白 https://www.cnblogs....

奋斗的小牛
昨天
2
0
数据结构与算法3

要抓紧喽~~~~~~~放羊的孩纸回来喽 LowArray类和LowArrayApp类 程序将一个普通的Java数组封装在LowArray类中。类中的数组隐藏了起来,它是私有的,所以只有类自己的方法才能访问他。 LowArray...

沉迷于编程的小菜菜
昨天
1
0
spring boot应用测试框架介绍

一、spring boot应用测试存在的问题 官方提供的测试框架spring-boot-test-starter,虽然提供了很多功能(junit、spring test、assertj、hamcrest、mockito、jsonassert、jsonpath),但是在数...

yangjianzhou
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部