Day 5-<补充> 类的的继承和查找顺序
类的继承于查找顺序:
在py2中,不继承object的类为经典类,经典类继承查找:深度优先.
在py3中,默认继承object,所以python3中都是新式类,新式类的继承查找:广度优先.
类的特殊属性:
类名.__name__# 类的名字(字符串)
类名.__doc__# 类的文档字符串
类名.__base__# 类的第一个父类(在讲继承时会讲)
类名.__bases__# 类所有父类构成的元组(在讲继承时会讲)
类名.__dict__# 类的字典属性
类名.__module__# 类定义所在的模块
类名.__class__# 实例对应的类(仅新式类中)
class People:
"""
我是文档
"""
country='China'
x=1
def run(self):
"""
我也是文档
:return:
"""
print('----->', self) # 实例化出三个空对象
obj1=People()
obj2=People()
obj3=People() # 为对象定制自己独有的特征
obj1.name='egon'
obj1.age=18
obj1.sex='male' obj2.name='lxx'
obj2.age=38
obj2.sex='female' obj3.name='alex'
obj3.age=38
obj3.sex='female' print(People.__doc__) # 类中的说明文档
# 我是文档 print(obj1.run.__doc__) # 类中方法的说明文档 #我也是文档
# :return:
print(People.__name__) # 类的名字,返回是一个字符串
#People
print(People.__bases__) # 类继承的父类
# (<class 'object'>,)
print(People.__dict__) # 类的字典属性
#{'__module__': '__main__', '__doc__': '\n 我是文档\n ', 'country': 'China', 'x': 1, 'run': <function People.run at 0x0000000002A2D840>, '__dict__': <attribute '__dict__' of 'People' objects>, '__weakref__': <attribute '__weakref__' of 'People' objects>}
print(People.__module__) # 类定义所在的模块
# __main__
print(People.__class__) # 实例对应的类(仅新式类,默认type类)
# <class 'type'>
组合与继承都是有效地利用已有类的资源的重要方式。但是二者的概念和使用场景皆不同,
1.继承的方式
通过继承建立了派生类与基类之间的关系,它是一种'是'的关系,比如白马是马,人是动物。
当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好,比如老师是人,学生是人
2.组合的方式
用组合的方式建立了类与组合的类之间的关系,它是一种‘有’的关系,比如教授有生日,教授教python和linux课程,教授有学生s1、s2、s3...
3.什么时候使用?
当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好
# 组合 class People:
def __init__(self,name,sex,age):
self.name = name
self.sex=sex
self.age =age class Course:
def __init__(self,name,price,period):
self.name =name
self.price = price
self.period =period class Stu(People):
def __init__(self,name,sex,age):
People.__init__(self,name,sex,age)
self.course =[] class Teacher(People):
def __init__(self,name,sex,age):
People.__init__(self,name,sex,age)
self.stu=[] # 创建课程对象
py = Course("python",19800,"8months")
linux = Course("linux",12000,"9months")
#创建学生对象
s1 = Stu("jack","男",22)
s2 = Stu("lucy","女",18)
# 给学校添加课程,这里运用了组合.
s1.course.append(py)
s1.course.append(linux)
s2.course.append(py)
s2.course.append(linux)
#创建讲师对象
t1 = Teacher("Nick","男",25)
# 给讲师添加学生,这里运用了组合.
t1.stu.append(s1)
t1.stu.append(s2) # 查看学生s1的课程信息
for course_obj in s1.course:
print("课程名:%s,价格:%s,周期:%s"%(course_obj.name,course_obj.price,course_obj.period)) """
课程名:python,价格:19800,周期:8months
课程名:linux,价格:12000,周期:9months """
# 查看讲师的学生
for stu in t1.stu:
print(stu.name) """
jack
lucy """
Day 5-<补充> 类的的继承和查找顺序的更多相关文章
- 类和实例属性的查找顺序 mro查找
如果多个类继承父类,然后又被多个类继承这种复杂的问题,可以使用 mro方法 例如: class A: pass class C(D): pass class B(D): pass class A(B, ...
- 【python】-- 类的多继承、经典类、新式类
继承知识点补充 在python还支持多继承,但是一般我们很少用,有些语言干脆就不支持多继承,有多继承,就会带来两个概念,经典类和新式类. 一.多继承 之前我们都是讲的单继承,那么什么是多继承呢?说白了 ...
- python基础语法20 面向对象5 exec内置函数的补充,元类,属性查找顺序
exec内置函数的补充 exec: 是一个python内置函数,可以将字符串的代码添加到名称空间中; - 全局名称空间 - 局部名称空间 exec(字符串形式的代码, 全局名称空间, 局部名称空间) ...
- Action类为何要继承ActionSupport
Action类为何要继承ActionSupport 理论上Struts 2.0的Action无须实现任何接口或继承任何类型,但是,我们为了方便实现Action,大多数情况下都会继承com.open ...
- 接口是否可继承接口? 抽像类是否可实现(implements)接口? 抽像类是否可继承实体类(concrete class)?
接口是否可继承接口? 抽像类是否可实现(implements)接口? 抽像类是否可继承实体类(concrete class)? 1. 接口可以继承接口. 2. 抽像类可以实现(implements)接 ...
- C++学习19 类的多继承
在前面的例子中,派生类都只有一个基类,称为单继承.除此之外,C++也支持多继承,即一个派生类可以有两个或多个基类. 多继承容易让代码逻辑复杂.思路混乱,一直备受争议,中小型项目中较少使用,后来的 Ja ...
- 24 类:组合 继承 super关键字 面向对象的三大性
组合 组合:自定义类的对象作为另外一个类的属性 class Teacher: def __init__(self, name, age): self.name = name self.age = ag ...
- Java开发笔记(四十八)类的简单继承
前面介绍了类的基本用法,主要是如何封装一个类的各项要素,包括成员属性.成员方法.构造方法等,想必大家对类的简单运用早已驾轻就熟.所谓“物以类聚,人以群分”,之所以某些事物会聚在一起,乃是因为它们拥有类 ...
- Es5中的类和静态方法 继承
Es5中的类和静态方法 继承(原型链继承.对象冒充继承.原型链+对象冒充组合继承) // es5里面的类 //1.最简单的类 // function Person(){ // this.name='张 ...
随机推荐
- java中伪共享问题
伪共享(False Sharing) 原文地址:http://ifeve.com/false-sharing/ 作者:Martin Thompson 译者:丁一 缓存系统中是以缓存行(cache l ...
- Zend:PHP框架结束的开始?
Zend:PHP框架结束的开始? 随着Zeev Suraski, Matthew Weier O'Phinney, Enrico Zimuel and Dmitry Stogov 这些PHP核心小组的 ...
- 《JAVA程序设计》_第一周学习总结
20175217吴一凡 <java程序设计> 第一周学习总结 虽然已经做好了心理准备,但第一周的学习任务着实让我忙了整整三天,还是挺充实的吧.寒假已经在自己的电脑上安装好了虚拟机,我就在我 ...
- P1553 数字反转(升级版)(模拟)
花了2个小时,写的..mmp只想说,还是我太菜了. #include<iostream> #include<cstring> using namespace std; ]; i ...
- sku回忆笔记
分类表:(商品分类编号, 分类名称, 父分类编号)(1, 男装, 0)(2, 裤子, 1)(3, 外套, 1)(4, 内裤, 1)(5, 袜子, 1) 商品表:(商品编号, 商品名称, 商品分类编号, ...
- 【window】window10永久关闭更新
在使用pc过程中自己遇到的问题 相关资料:http://www.ghost580.com/win10/2016-10-21/17295.html 作者:smile.轉角 QQ:493177502
- DVR登录绕过漏洞(CVE-2018-9995)
###漏洞描述 此漏洞允许攻击者通过修改“Cookie: uid=admin” 之后访问特定 DVR 的控制面板,返回此设备的明文管理员凭证. ###漏洞利用 1.利用代码 curl "ht ...
- springmvc中messageConverter用法
解决StringHttpMessageConverter乱码问题问题: 当我们将字符串对象通过springmvc传回浏览器时,因为StringHttpMessageConverter消息转换器中默认的 ...
- LNMP安装,FastCGI说明
1.1.工作原理讲解说明 1. 用户请求的静态文件,由nginx服务器处理,根据静态的location配置进行处理 用户请求的动态文件,由php服务进行处理,根据动态的location配置进行处理 2 ...
- 缓存表 内存表(将表keep到内存)
缓存表 内存表(将表keep到内存) 一.引言: 有时候一些基础表需要非常的频繁访问,尤其是在一些循环中,对该表中的访问速度将变的非常重要.为了提高系统的处理性能,可以考虑将一些表及索引读取并 ...