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

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

抽象类补充:

 import abc
class Parent(metaclass= abc.ABCMeta):
x=1
@abc.abstractclassmethod
def foo(self):
pass @abc.abstractclassmethod
def bar(self):
pass class Child(Parent ):
def foo(self):
pass def bar(self):
pass c=Child()
print(c.x)
运行结果:
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方法的升级---版本一

 #! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "Always"
# Date: 2017/7/2 # propetry的使用 class Test(object):
def __init__(self):
self.__num = 100 def getNum(self):
print("++++++++++++getNum++++++++++++")
return self.__num def setNum(self, newNum):
print("++++++++++++setNum++++++++++++")
self.__num = newNum num = property(getNum, setNum) # 位置参数(self, fget=None, fset=None, fdel=None, doc=None),get 在前面, set在后面 t = Test() print(t.getNum()) t.setNum(200) # 正常情况下,都是这么调用
print(t.getNum()) t.num = 50 # 使用 property 后,将get、set设置成了属性,这样的话,调用起来就比较方便了。可以直接使用 print(t.num) get/set升级版本一

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

 # Date: 2017/7/2

 # propetry的使用

 class Test(object):
def __init__(self):
self.__num = 100 # get写前面,set写后面,两个函数名字一样,函数名为后面的取值依据,个体前面写 property,set写 函数名.setter
@property
def num(self):
print("++++++++++++getNum++++++++++++")
return self.__num @num.setter
def num(self, newNum):
print("++++++++++++setNum++++++++++++")
self.__num = newNum @num.deleter
def num(self):
print("++++++++++++deNum++++++++++++")
del self.__num # 话句话说, 前面加 property 的时候,就把这个函数变成了一个属性(变量) 这样的话,代表可以直接执行
# 这种情况下如果遇到有参数的时候,传参数可以参考 setter 这个赋值的操作,也就是,写两个咯。。。多试大兄弟
t = Test() t.num = 50
print(t.num) del t.num # 通过这个可以删除 __num 这个私有属性 # 上面就是三个属性的装饰器
# 通常可以只提供一个查询的结果的接口给别人(这个函数里面可可以添加好多的流程) get/set升级版本二

最新文章

  1. web框架 之 Tornado
  2. Highcharts 饼图 文字颜色设置
  3. 多个git账号的配置
  4. Unity3D UGUI学习系列索引(暂未完成)
  5. sql server和my sql 命令(语句)的差别,sql server与mysql的比較
  6. Fixing common issues when hosting a .NET 4.0 WCF service in IIS 7
  7. C语言编译过程简介
  8. 清楚float浮动的四种方法
  9. Uva 11076 Add Again (数论+组合数学)
  10. 面向对象15.2String类-构造函数
  11. PHP常用配置
  12. Spring Cloud Alibaba基础教程:使用Nacos作为配置中心
  13. OllyDbg使用笔记
  14. Hadoop启动脚本分析
  15. Python中对象的引用与复制
  16. Win10系列:JavaScript 模板绑定
  17. sublime text3 激活码——许可证
  18. Linux之须知
  19. Shell 利用 curl 模拟登陆
  20. Linux服务器配置---安装telnet

热门文章

  1. 二.Python基础语法和数据类型
  2. echarts的图表根据父容器大小的改变而改变(弹窗easy-ui的window窗口)
  3. 使用lombok时@Setter @Getter无效
  4. actionlib学习
  5. C#编程入门--MYSQLHELPER
  6. Dart编程变量
  7. PHP rand() 函数
  8. sql语句创建表
  9. kafka拦截器原理|案例实操
  10. NX文件名与工程图名自动关联