Python学习笔记8-类的继承 、深度优先、广度优先
Python 类声明
语法:
class 类名:
类体
例:
#--encoding:utf-8--
#
class AddressBookEntity:
myVersion=0.1
def __init__(self,name,phone):
self.name=name
self.phone=phone
def updatePhone(self,newPhone):
self.phone=newPhone
print 'update user\' phone :'+newPhone tom=AddressBookEntity('Tom','158375599668')
jack=AddressBookEntity('Jack','18975662244') print tom
print tom.name,tom.phone
print jack
print jack.name,jack.phone
tom.updatePhone('15000000000')
print tom.name,tom.phone
Python 类的继承
在ptyhon中类一个类是可以同时继承多个类,语法:
class 类名(父类1,父类2,...)
类体
Python类继承之深度优先
python 支持多继承,但对与经典类和新式类来说,多继承查找的顺序是不一样的。
经典类:
class P1:
def foo(self):
print 'p1-foo' class P2 :
def foo(self):
print 'p2-foo' def bar(self):
print 'p2-bar' class C1 (P1,P2):
pass class C2 (P1,P2):
def bar(self):
print 'C2-bar' class D(C1,C2):
pass
d = D()
d.foo() # 输出 p1-foo
d.bar() # 输出 p2-bar
实例d调用foo()时,搜索顺序是 D => C1 => P1
实例d调用bar()时,搜索顺序是 D => C1 => P1 => P2
换句话说,经典类的搜索方式是按照“从左至右,深度优先”的方式去查找属性。d先查找自身是否有foo方法,没有则查找最近的父类C1里是否有该方法,如果没有则继续向上查找,直到在P1中找到该方法,查找结束。
Python类继承之广度优先
新式类:
class P1(object):
def foo(self):
print 'p1-foo' class P2(object):
def foo(self):
print 'p2-foo' def bar(self):
print 'p2-bar' class C1 (P1,P2):
pass class C2 (P1,P2):
def bar(self):
print 'C2-bar' class D(C1,C2):
pass
d=D()
d.foo() # 输出 p1-foo
d.bar() # 输出 c2-bar
实例d调用foo()时,搜索顺序是 D => C1 => C2 => P1
实例d调用bar()时,搜索顺序是 D => C1 => C2
可以看出,新式类的搜索方式是采用“广度优先”的方式去查找属性。
Python学习笔记8-类的继承 、深度优先、广度优先的更多相关文章
- python学习笔记4_类和更抽象
python学习笔记4_类和更抽象 一.对象 class 对象主要有三个特性,继承.封装.多态.python的核心. 1.多态.封装.继承 多态,就算不知道变量所引用的类型,还是可以操作对象,根据类型 ...
- python学习笔记1-元类__metaclass__
type 其实就是元类,type 是python 背后创建所有对象的元类 python 中的类的创建规则: 假设创建Foo 这个类 class Foo(Bar): def __init__(): ...
- Python学习笔记 - day7 - 类
类 面向对象最重要的概念就是类(Class)和实例(Instance),比如球类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同.在Python中,定义类 ...
- Python学习笔记008_类_对象_继承_组合_类相关的BIF
# 对象 = 属性 + 方法>>> # Python中的类名约定以大写字母开始>>> # tt = Turtle() 这就是创建类实例的方法,其它语言用new ,它 ...
- Python 学习笔记15 类 - 继承
我们在编程的过程中,并非都是要重头开始.比如其他人已经有现成的类,我们可以使用其他找人编写的类.术语称之为: 继承. 当一个类继承例外一个类时,它可以获得这个类的所有属性和方法:原有的类称之为 父类, ...
- Python学习笔记12—类
典型的类和调用方法: #!/usr/bin/env Python # coding=utf-8 __metaclass__ = type #新式类 class Person: #创建类 def __i ...
- Python 学习笔记 - 10.类(Class) 1
定义 Python 的 Class 比较特别,和我们习惯的静态语言类型定义有很大区别. 1. 使用一个名为 __init__ 的方法来完成初始化.2. 使用一个名为 __del__ 的方法来完成类似析 ...
- python学习笔记(七) 类和pygame实现打飞机游戏
python中类声明如下: class Student(object): def __init__(self, name, score): self.name = name self.score = ...
- Python学习笔记:类
类可以将数据与函数封装起来,用一个例子解释,先定义一个类: class athlete: def __init__(self,a_name,a_dob=None,a_times=[]): self.n ...
- Python 学习笔记16 类 - 导入
我们在编码的过程中,可能会给对象添加越来越多的功能,即使我们使用了继承,也不可避免的使文件越来越臃肿. 为了避免这种情况, Python允许将对象存储在模块中,并且可以在其他模块中进行导入. 其实这和 ...
随机推荐
- python操作redis-zset
#!/usr/bin/python #!coding: utf-8 import redis if __name__=="__main__": try: conn=redis.St ...
- 微软源代码管理工具TFS2013安装与使用图文教程
微软源代码管理工具TFS2013安装与使用图文教程 这篇文章主要介绍了微软源代码管理工具TFS2013安装与使用图文教程,本文详细的给出了TFS2013的安装配置过程.使用教程,需要的朋友可以参考下 ...
- NODE.JS安装配置
- pyspark 写 logistic regression
import random as rd import math class LogisticRegressionPySpark: def __init__(self,MaxItr=100,eps=0. ...
- SoftLAyer VPN
1,安装softlayer-VPN(即跑VPN客户端)的机器与在SoftLAyer中的HardwareHostServers or VMIServer的privateIP互通
- Quartz框架的使用
专用词汇:scheduler:任务调度器trigger:触发器,用于定义任务调度时间规则job:任务,即被调度的任务misfire:错过的,指本来应该被执行但实际没有被执行的任务调度 Quartz核心 ...
- 解决的方法:warning: Clock skew detected. Your build may be incomplete.
因为时钟同步问题.出现 warning: Clock skew detected. Your build may be incomplete.这种警告, 解决的方法: find . -type f ...
- 自定义按照index和key访问的List
List<T>用起来比较方便,但是有时候要按照Index来访问List中的对象有些繁琐,所以想是不是扩展一下,既能按照Index来访问,又能按照Key访问. 实现方法: public cl ...
- 浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
本文结合W3School的文档,分析了jQuery中 wrap() wrapAll() 与 wrapInner()的差异,并给出了图文对比教程,非常的简单实用,有需要的朋友可以参考下 今晚看书的时候发 ...
- SWFUpload的使用及其注意事项
SWFUpload的使用: 添加Jquery swfuploaad.js handler.js文件 配置参数: upload_url:文件将要被传到的处理程序 post_params:{“”: ...