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 面向对象的程序设计
一:什么是编程范式? 编程是程序员用特定的语法 + 数据结构 + 算法组成的代码来告诉计算机如何执行任务的过程. 如果把编程的过程比喻为练习武功,那么编程范式指的就是武林中的各种流派,而在编程的世界里 ...
随机推荐
- Error:ORA-00937: 非单组分组函数错误
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/istend/article/details/34429721 ORA-00937: 非单组分组函数错 ...
- spring boot jpa 多表关联 @OneToOne @OneToMany @ManyToOne@ManyToMany
1.一对一关联 @OneToOne import lombok.Data; import javax.persistence.*; /** * @Author: GWL * @Description: ...
- pytest_fixture--scope="session"
import pytest@pytest.fixture(scope="session")def login(): print("\n输入用户名密码登陆! configt ...
- 微信1.8.6.1 SDK 无法授权登录解决办法
我用的cocos2d-lua 3.9 项目打包 调用微信授权登录的时候 授权登录接口一直抛异常导致微信都无法拉起来 按照官网配置了universal link (这个也搞了很长时间jason 配置文件 ...
- ARM TK1 安装kinect驱动
首先安装usb库 $ git clone https://github.com/libusb/libusb.git 编译libusb需要的工具 $ sudo apt-get install autoc ...
- 文件上传到ftp服务工具类
直接引用此java工具类就好 import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcep ...
- http11.Http11OutputBuffer.SocketOutputBuffer.doWrite
这是一个错误. 我在spring框架中,创建了一个基类SuperBaseController, 并且使用了@ModelAttribute用来给HttpServletRequest和HttpServle ...
- Mysql 查询表中某字段的重复值,删除重复值保留id最小的数据
1 查询重复值 ); 2 删除重复值 -- 创建临时表 ) ); -- 把重复数据放进临时表 INSERT Hb_Student_a SELECT id,studentNumber FROM Hb_S ...
- Codeforces346D. Robot Control
D. Robot Control time limit per test 6 seconds memory limit per test 256 megabytes input standard in ...
- easyui 弹出框调用外部js函数 提示“Microsoft JScript 运行时错误: 缺少对象”
昨天遇见一个很诡异的问题 我用easyui做了一个网站,其中有一个a页面和一个b页面,我通过easyui的window功能,在a页面中弹出了一个b页面,在b页面中,我用到了一个外部js的函数c,我在b ...