day32--面向对象的程序设计之继承实现的原理(继承顺序)、封装、property
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升级版本二
day32--面向对象的程序设计之继承实现的原理(继承顺序)、封装、property的更多相关文章
- 重学JavaScript之面向对象的程序设计(继承)
1. 继承 ES 中只支持实现继承,而且其实现继承主要依靠原型链来实现的. 2. 原型链 ES中 描述了 原型链的概念,并将原型链作为实现继承的主要方法.其基本思想是利用原型让一个引用类型继承另一个引 ...
- Python--面向对象的程序设计之继承实现的原理(继承顺序)、封装、property
抽象类补充: import abc class Parent(metaclass= abc.ABCMeta): x=1 @abc.abstractclassmethod def foo(self): ...
- js面向对象的程序设计 --- 下篇 继承启蒙
继承是oo语言中一个最为人津津乐道的概念.ECMAScript支持实现继承,而且实现继承只要是靠原型链来实现的 ·原型链 其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法. 简单回顾一 ...
- Python之路【第八篇】:面向对象的程序设计
阅读目录 一 面向对象的程序设计的由来二 什么是面向对象的程序设计及为什么要有它三 类和对象3.1 什么是对象,什么是类3.2 类相关知识3.3 对象相关知识3.4 对象之间的交互3.5 类名称空间与 ...
- JavaScript高级程序设计学习笔记--面向对象的程序设计(二)-- 继承
相关文章: 面向对象的程序设计(一) — 创建对象 http://www.cnblogs.com/blackwood/archive/2013/04/24/3039523.html 继承 继承是OO语 ...
- Python基础(17)_面向对象程序设计(抽象类、继承原理、封装、多态,绑定方法)
一.抽象类 抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化 1.在python中实现抽象类 import abc #利用abc模块实现抽象类 class All_file(metacl ...
- 【Python3之面向对象的程序设计】
一.面向对象的程序设计的由来 1.第一阶段:面向机器,1940年以前 最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行的指令和数据. 简单来说,就是直接编写 0 和 1 ...
- Python进阶---面向对象的程序设计思想
Python的面向对象 一.面向过程与面向对象的对比 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...
- python 面向对象的程序设计
一:什么是编程范式? 编程是程序员用特定的语法 + 数据结构 + 算法组成的代码来告诉计算机如何执行任务的过程. 如果把编程的过程比喻为练习武功,那么编程范式指的就是武林中的各种流派,而在编程的世界里 ...
随机推荐
- touchWX使用 echarts
<button bindtap="init" wx:if="{{!isLoaded}}">加载图表</button> <butto ...
- log4cplus TimeBasedRollingFileAppender
参考自:http://blog.csdn.net/u010607621/article/details/54944696 对于TimeBasedRollingFileAppender 这个日志appe ...
- BCZM: Chapter 2
2.1 二进制数中 1 的个数 实现一个函数,输入一个无符号整数,输出该数二进制中的1的个数.例如把9表示成二进制是1001,有2位是1,因此如果输入9,该函数输出2 分析与解法 解法1:利用十进制和 ...
- 【BZOJ 3569】DZY Loves Chinese II
题面 Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以修能. 遂降临于OI界,欲以神力而凌♂辱众生. 今Dzy有一魞歄图 ...
- ps去除元素的三种常用方法
1.仿制图章工具,alt+鼠标左键进行选取复制区域,然后左键点击需要覆盖的区域. 2.套锁工具--选择区域--右键填充--内容识别. 3.修补工具,选中区域--拖动适配. 附带另一份较 ...
- ubuntu 16.04 jdk-8u201-linux-x64.tar.gz 安装部署
都是在普通用户加sudo代替root 1.sudo tar -zxvf jdk-8u201-linux-x64.tar.gz2.sudo chown make:make jdk1.8.0/3.sudo ...
- Intervals POJ - 3680
传送门 给定数轴上n个带权区间$[l_i,r_i]$,权值为$w_i$ 选出一些区间使权值和最大,且每个点被覆盖次数不超过k次. 离散+拆点,最大费用可行流(跑到费用为负为止) 第一部分点按下标串起来 ...
- css Sticky footers
写在前面 做过网页开发的同学想必都遇到过这样尴尬的排版问题:在主体内容不足够多或者未完全加载出来之前,就会导致出现(图一)的这种情况,原因是因为没有足够的垂直空间使得页脚推到浏览器窗口最底部.但是,我 ...
- 原生js实现文件下载并设置请求头header
原生js实现文件下载并设置请求头header const token="自行定义";//如果有 /** * 向指定路径发送下载请求 * @param{String} url 请求路 ...
- HDU6447 YJJ's Salesman-2018CCPC网络赛-线段树求区间最值+离散化+dp
目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog Problem:Portal传送门 原题目描述在最下面. 1e5个点,问 ...