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的更多相关文章

  1. 重学JavaScript之面向对象的程序设计(继承)

    1. 继承 ES 中只支持实现继承,而且其实现继承主要依靠原型链来实现的. 2. 原型链 ES中 描述了 原型链的概念,并将原型链作为实现继承的主要方法.其基本思想是利用原型让一个引用类型继承另一个引 ...

  2. Python--面向对象的程序设计之继承实现的原理(继承顺序)、封装、property

    抽象类补充: import abc class Parent(metaclass= abc.ABCMeta): x=1 @abc.abstractclassmethod def foo(self): ...

  3. js面向对象的程序设计 --- 下篇 继承启蒙

    继承是oo语言中一个最为人津津乐道的概念.ECMAScript支持实现继承,而且实现继承只要是靠原型链来实现的 ·原型链 其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法. 简单回顾一 ...

  4. Python之路【第八篇】:面向对象的程序设计

    阅读目录 一 面向对象的程序设计的由来二 什么是面向对象的程序设计及为什么要有它三 类和对象3.1 什么是对象,什么是类3.2 类相关知识3.3 对象相关知识3.4 对象之间的交互3.5 类名称空间与 ...

  5. JavaScript高级程序设计学习笔记--面向对象的程序设计(二)-- 继承

    相关文章: 面向对象的程序设计(一) — 创建对象 http://www.cnblogs.com/blackwood/archive/2013/04/24/3039523.html 继承 继承是OO语 ...

  6. Python基础(17)_面向对象程序设计(抽象类、继承原理、封装、多态,绑定方法)

    一.抽象类 抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化 1.在python中实现抽象类 import abc #利用abc模块实现抽象类 class All_file(metacl ...

  7. 【Python3之面向对象的程序设计】

    一.面向对象的程序设计的由来 1.第一阶段:面向机器,1940年以前 最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行的指令和数据. 简单来说,就是直接编写 0 和 1 ...

  8. Python进阶---面向对象的程序设计思想

    Python的面向对象 一.面向过程与面向对象的对比 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...

  9. python 面向对象的程序设计

    一:什么是编程范式? 编程是程序员用特定的语法 + 数据结构 + 算法组成的代码来告诉计算机如何执行任务的过程. 如果把编程的过程比喻为练习武功,那么编程范式指的就是武林中的各种流派,而在编程的世界里 ...

随机推荐

  1. sanic之websocket路由

    在某些时候,需要建立websocket路由,来建立长链接,来实时传输数据,就比如一些聊天应用,就有实时音视频,需要实时传出状态 在sanic框架中支持两种websocket路由方式,有一种是再app中 ...

  2. Center OS 部署Tomcat服务

    一.下载tomcat tomcat官网下载软件包,官网:https://tomcat.apache.org/ 点击download,进入下载页面,下载如下版本: 下载完成后用ftp上传到服务器,SSH ...

  3. python pathlib模块详解

    python pathlib模块详解    

  4. MaxCompute问答整理之9月

    本文是基于本人对MaxCompute产品的学习进度,再结合开发者社区里面的一些问题,进而整理成文.希望对大家有所帮助. 问题一.如何查看information_schema的tables? 在使用OD ...

  5. 「题解」:Kill

    问题 A: Kill 时间限制: 1 Sec  内存限制: 256 MB 题面 题面谢绝公开. 题解 80%算法 赛时并没有想到正解,而是选择了另一种正确性较对的贪心验证. 对于每一个怪,我们定义它的 ...

  6. redis笔记--------Jedis使用

    redis安装和启动就不说了 一.准备工作 1.redis -cli -p 6379 2.eclipse中新建项目,并导入jedis相关包 3.测试jedis连通性 二.Jedis常用API (哈希) ...

  7. 记录一次失败的向git提交代码,和解决的方法。(首次创建仓库)

    背景: 向git push代码(创建一个新的仓库) 做法: 在github创建一个新的仓库------>本地新建文件夹------->依次执行了下面的命令 git init git clo ...

  8. Altium Designer 精心总结(转)

    https://blog.csdn.net/qq_29350001/article/details/52199356 设置铺铜间距规则,Electrical-Clearence_Poly设置如下,是铺 ...

  9. haproxy Mycat集2---KeepAlived

    KA 配两台 MASTER,BACKUP节点 安装Keepalived 1.下载安装依赖包 yum install -y wget make gcc openssl-devel popt-devel ...

  10. centos安装与配置R语言

    Linux下安装R语言 一.编译安装 由于采用编译安装,所以需要用到gcc编译环境,在编译前check文件时还会用到libXt-devel和readline-devel两个依赖,所以在编译R语言源码时 ...