博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
day32--面向对象的程序设计之继承实现的原理(继承顺序)、封装、property
阅读量:6589 次
发布时间:2019-06-24

本文共 2532 字,大约阅读时间需要 8 分钟。

Python之路,Day19 = 面向对象的程序设计之继承实现的原理(继承顺序)、封装、property

 

以下类容参考自:http://www.cnblogs.com/metianzing/p/7121947.html

 

抽象类补充:

1 import abc 2 class Parent(metaclass= abc.ABCMeta): 3     x=1 4     @abc.abstractclassmethod 5     def foo(self): 6         pass 7  8     @abc.abstractclassmethod 9     def bar(self):10         pass11 12 class Child(Parent ):13     def foo(self):14         pass15 16     def bar(self):17         pass18 19 c=Child()20 print(c.x)21 运行结果:22 1

 注意1:父类的变量可以遗传给子类

 注意2:抽象类:本身不能被实例化,也不应该被实例化,它的作用就是定义标准,并不用具体实现。

继承实现的原理(继承顺序)

1 继承顺序

继承

新式类和经典类都会先找完一个分支(在多个父类没有共同父类的情况下)
当父类出现共同父类的时候,新式类广度优先,经典类深度优先(到共同父类截止)

继承顺序,可以通过 h.mro() 来查看,里面是个字典,

# 这个方法只在新式类中有

super()方法继承只能用于新式类
super()方法继承只能用于新式类
寻找顺序会按照 mro 中顺序找?怎么确定哪些属性给谁?
ptyon 3
super().__init__(name, age, sex)
python 2
super(子类,self).__init__(name, age, sex)

 封装:

 
封装数据
封装功能

  get/set方法的升级---版本一

1 #! /usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # __author__ = "Always" 4 # Date: 2017/7/2 5  6 # propetry的使用 7  8 class Test(object): 9     def __init__(self):10         self.__num = 10011 12 13     def getNum(self):14         print("++++++++++++getNum++++++++++++")15         return self.__num16 17     def setNum(self, newNum):18         print("++++++++++++setNum++++++++++++")19         self.__num = newNum20 21     num = property(getNum, setNum)     # 位置参数(self, fget=None, fset=None, fdel=None, doc=None),get 在前面, set在后面22 23 t = Test()24 25 print(t.getNum())26 27 t.setNum(200)                       # 正常情况下,都是这么调用28 print(t.getNum())29 30 31 t.num = 50             # 使用 property 后,将get、set设置成了属性,这样的话,调用起来就比较方便了。可以直接使用32 33 print(t.num)34 35 get/set升级版本一

get/set方法的升级---版本二

1 # Date: 2017/7/2 2  3 # propetry的使用 4  5 class Test(object): 6     def __init__(self): 7         self.__num = 100 8  9 # get写前面,set写后面,两个函数名字一样,函数名为后面的取值依据,个体前面写 property,set写 函数名.setter10     @property11     def num(self):12         print("++++++++++++getNum++++++++++++")13         return self.__num14 15     @num.setter16     def num(self, newNum):17         print("++++++++++++setNum++++++++++++")18         self.__num = newNum19 20     @num.deleter21     def num(self):22         print("++++++++++++deNum++++++++++++")23         del self.__num24 25 # 话句话说, 前面加 property 的时候,就把这个函数变成了一个属性(变量) 这样的话,代表可以直接执行26 # 这种情况下如果遇到有参数的时候,传参数可以参考 setter 这个赋值的操作,也就是,写两个咯。。。多试大兄弟27 t = Test()28 29 t.num = 5030 print(t.num)31 32 del t.num   # 通过这个可以删除 __num  这个私有属性33 34 # 上面就是三个属性的装饰器35 # 通常可以只提供一个查询的结果的接口给别人(这个函数里面可可以添加好多的流程)36 37 get/set升级版本二

 

转载于:https://www.cnblogs.com/alwaysInMe/p/7123162.html

你可能感兴趣的文章
RxJava2.0的初学者必备教程(九)
查看>>
记一次omi的项目之旅
查看>>
Android API级别、代号、发布时间及平台亮点整理
查看>>
Redis数据类型(上)
查看>>
安装配置nagios
查看>>
QQ第三方授权登录(带详细源码)
查看>>
LLDP(链路层发现协议)
查看>>
CentOS 6.5 Zabbix监.控系统功能及基本使用
查看>>
Ubuntu14 添加程序启动
查看>>
我的友情链接
查看>>
windows网络安全以及常见网络***方式
查看>>
警告 初始化默认驱动器时出错“找不到运行 Active Directory Web 服务的默认服务器。”...
查看>>
JS字符串转换数字
查看>>
手机版页面正式发布 html5取代wap(wml)
查看>>
centos7-修改主机名
查看>>
面试宝典系列-mysql面试基础题
查看>>
pymssql的简单使用
查看>>
微信硬件平台对接--蓝牙
查看>>
spring data for mongo
查看>>
开启 URL 重写
查看>>