day25-python之继承组合
1.上节回顾
class School:
x=1
def __init__(self,name,addr,type):
self.Name=name
self.Addr=addr
self.Type=type def tell_info(self):
print('学校的详细信息是:name:%s addr:%s' %(self.Name,self.Addr)) # s1=School('oldboy','沙河','私立') # print(s1.__dict__)
#
# print(School.__dict__)
#
# s1.tell_info()
# School.tell_info(s1)
2.静态属性
class Room:
tag=1
def __init__(self,name,owner,width,length,heigh):
self.name=name
self.owner=owner
self.width=width
self.length=length
self.heigh=heigh @property
def cal_area(self):
# print('%s 住的 %s 总面积是%s' % (self.owner,self.name, self.width * self.length))
return self.width * self.length
@property
def cal1_area(self):
return self.width * self.length def test(self):
print('from test',self.name) @classmethod
def tell_info(cls,x):
print(cls)
print('--》',cls.tag,x)#print('--》',Room.tag)
# def tell_info(self):
# print('---->',self.tag)
@classmethod
def tell_info1(cls,x):
print(cls)
print('-->>',cls.tag,x) # print(Room.tag) # Room.test(1) #1.name
# r1=Room('厕所','alex',100,100,100000)
# Room.tell_info(10) r1=Room('厕所','alex',100,100,100000)
r2=Room('公共厕所','yuanhao',1,1,1)
# print('%s 住的 %s 总面积是%s' %(r1.owner,r1.name,r1.width*r1.length))
# print('%s 住的 %s 总面积是%s' %(r2.owner,r2.name,r2.width*r2.length))
# r1.cal_area()
# r2.cal_area()
print(r1.cal_area)
print(r2.cal_area)
print(r1.name)
print(r2.name)
3.类方法
class Room:
tag=1
def __init__(self,name,owner,width,length,heigh):
self.name=name
self.owner=owner
self.width=width
self.length=length
self.heigh=heigh @property
def cal_area(self):
# print('%s 住的 %s 总面积是%s' % (self.owner,self.name, self.width * self.length))
return self.width * self.length
@property
def cal_area1(self):
return self.width * self.length def test(self):
print('from test',self.name) @classmethod
def tell_info(cls,x):
print(cls)
print('--》',cls.tag,x)#print('--》',Room.tag)
# def tell_info(self):
# print('---->',self.tag) @classmethod
def tell_info1(cls,x):
print(cls)
print('-->>',cls.tag,x) # print(Room.tag) # Room.test(1) #1.name
r1=Room('厕所','alex',100,100,100000)
# Room.test(r1)
Room.tell_info(10)
4.静态方法
class Room:
tag=1
def __init__(self,name,owner,width,length,heigh):
self.name=name
self.owner=owner
self.width=width
self.length=length
self.heigh=heigh @property
def cal_area(self):
# print('%s 住的 %s 总面积是%s' % (self.owner,self.name, self.width * self.length))
return self.width * self.length @classmethod
def tell_info(cls,x):
print(cls)
print('--》',cls.tag,x)#print('--》',Room.tag)
# def tell_info(self):
# print('---->',self.tag) @staticmethod
def wash_body(a,b,c):
print('%s %s %s正在洗澡' %(a,b,c)) @staticmethod
def wash_body1(a,b,c):
print('%s %s %s正在洗澡'%(a,b,c)) def test(x,y):
print(x,y) # Room.wash_body('alex','yuanhao','wupeiqi') # print(Room.__dict__) r1=Room('厕所','alex',100,100,100000)
#
# print(r1.__dict__)
# r1.wash_body('alex','yuanhao','wupeiqi') # Room.test(1,2)
r1.test(1)
5.组合
# class Hand:
# pass
#
# class Foot:
# pass
#
# class Trunk:
# pass
#
# class Head:
# pass # class Person:
# def __init__(self,id_num,name):
# self.id_num=id_num
# self.name=name
# self.hand=Hand()
# self.foot=Foot()
# self.trunk=Trunk()
# self.head=Head()
# p1=Person('111111','alex')
#
#
# print(p1.__dict__) # class School:
# def __init__(self,name,addr):
# self.name=name
# self.addr=addr
#
# def zhao_sheng(self):
# print('%s 正在招生' %self.name)
#
# class Course:
# def __init__(self,name,price,period,school):
# self.name=name
# self.price=price
# self.period=period
# self.school=school
# #
# #
# #
# s1=School('oldboy','北京')
# s2=School('oldboy','南京')
# s3=School('oldboy','东京')
#
# # c1=Course('linux',10,'1h','oldboy 北京')
# c1=Course('linux',10,'1h',s1)
# #
# print(c1.__dict__)
# print(c1.school.name)
# print(s1) class School:
def __init__(self,name,addr):
self.name=name
self.addr=addr def zhao_sheng(self):
print('%s 正在招生' %self.name) class Course:
def __init__(self,name,price,period,school):
self.name=name
self.price=price
self.period=period
self.school = school s1=School('oldboy','北京')
s2=School('oldboy','南京')
s3=School('oldboy','东京')
#
# c1=Course('linux',10,'1h','oldboy 北京')
c1=Course('linux',10,'1h',s1) msg='''
1 老男孩 北京校区
2 老男孩 南京校区
3 老男孩 东京校区
'''
while True:
print(msg)
menu={
'':s1,
'':s2,
'':s3
}
choice=input('选择学校>>: ')
school_obj=menu[choice]
name=input('课程名>>: ')
price=input('课程费用>>: ')
period=input('课程周期>>: ')
new_course=Course(name,price,period,school_obj)
print('课程【%s】属于【%s】学校' %(new_course.name,new_course.school.name))
6.继承
class Dad:
'这个是爸爸类'
money=10
def __init__(self,name):
print('爸爸')
self.name=name
def hit_son(self):
print('%s 正在打儿子' %self.name) class Son(Dad):
money = 1000000000009
def __init__(self,name,age):
self.name=name
self.age=age def hit_son(self):
print('来自儿子类')
# print(Son.money)
# Son.hit_son(Son('andy',12))
# print(Dad.__dict__)
# print(Son.__dict__)
s1=Son('alex',18)
# s1.hit_son()
print(s1.money)
print(Dad.money)
print(s1.name)
print(s1.money)
print(s1.__dict__)
s1.hit_son()
7.接口继承
import abc
class All_file(metaclass=abc.ABCMeta):
@abc.abstractmethod
def read(self):
pass @abc.abstractclassmethod
def read1(self):
pass @abc.abstractmethod
def write(self):
pass @abc.abstractclassmethod
def write1(self):
pass class Disk(All_file):
def read(self):
print('disk read') def write(self):
print('disk write') class Cdrom(All_file):
def read(self):
print('cdrom read') def write(self):
print('cdrom write') class Mem(All_file):
def read(self):
print('mem read') def write(self):
print('mem write') class Mem1(All_file):
def read(self):
print('mem read') def write(self):
print('mem write')
#
m1=Mem1()
m1.read()
m1.write()
8.继承顺序
#coding:utf-8
class A:
def test(self):
print('A')
pass
class B(A):
# def test(self):
# print('B') pass
class C(A):
def test(self):
print('C')
pass class D(B):
# def test(self):
# print('D')
pass class E(C):
# def test(self):
# print('E')
pass class F(D,E):
# def test(self):
# print('F')
pass
f1=F()
f1.test() #经典类:F->D->B->A-->E--> print(F.__mro__) #F-->D->B-->E--->C--->A新式类
9.在子类中调用父类的方法
class Vehicle:
Country='China'
def __init__(self,name,speed,load,power):
self.name=name
self.speed=speed
self.load=load
self.power=power
def run(self):
print('开动啦')
print('开动啦')
class Subway(Vehicle):
def __init__(self,name,speed,load,power,line):
Vehicle.__init__(self,name,speed,load,power)
self.line=line def show_info(self):
print(self.name,self.speed,self.load,self.power,self.line) def run(self):
Vehicle.run(self)
print('%s %s 线,开动啦' %(self.name,self.line))
line13=Subway('北京地铁','10km/s',1000000000,'电',13) line13.show_info() line13.run()
10.super方法的使用
class Vehicle1:
Country='China'
def __init__(self,name,speed,load,power):
self.name=name
self.speed=speed
self.load=load
self.power=power
def run(self):
print('开动啦')
print('开动啦')
class Subway(Vehicle1):
def __init__(self,name,speed,load,power,line):
# Vehicle.__init__(self,name,speed,load,power)
# super().__init__(name,speed,load,power) #super(__class__,self).__init__(name,speed,load,power)
super(Subway,self).__init__(name,speed,load,power)
self.line=line
def show_info(self):
print(self.name,self.speed,self.load,self.power,self.line)
def run(self):
# Vehicle.run(self)
super().run()
print('%s %s 线,开动啦' %(self.name,self.line))
line13=Subway('北京地铁','10km/s',1000000000,'电',13)
line13.show_info()
line13.run() print(line13.__class__)
day25-python之继承组合的更多相关文章
- day25 python学习 继承,钻石继承 多态
---恢复内容开始--- 通过一个列子认识父类和子类中,子类的如何实现对父类默认属性调用,同时拥有自己的属性,如何在子类中调用父类的方法,class Ainmal: country='afdas' d ...
- day25 python学习 继承,钻石继承
通过一个列子认识父类和子类中,子类的如何实现对父类默认属性调用,同时拥有自己的属性,如何在子类中调用父类的方法,class Ainmal: country='afdas' def __init__(s ...
- python基础——继承与派生、组合
python基础--继承与派生 1 什么是继承: 继承是一种创建新的类的方式,在python中,新建的类可以继承自一个或者多个父类,原始类成为基类或超累,新建的类成为派生类或子类 1.1 继承分为:单 ...
- Python开发基础-Day19继承组合应用、对象序列化和反序列化,选课系统综合示例
继承+组合应用示例 class Date: #定义时间类,包含姓名.年.月.日,用于返回生日 def __init__(self,name,year,mon,day): self.name = nam ...
- python面向对象编程 继承 组合 接口和抽象类
1.类是用来描述某一类的事物,类的对象就是这一类事物中的一个个体.是事物就要有属性,属性分为 1:数据属性:就是变量 2:函数属性:就是函数,在面向对象里通常称为方法 注意:类和对象均用点来访问自己的 ...
- Py修行路 python基础 (十五)面向对象编程 继承 组合 接口和抽象类
一.前提回忆: 1.类是用来描述某一类的事物,类的对象就是这一类事物中的一个个体.是事物就要有属性,属性分为 1:数据属性:就是变量 2:函数属性:就是函数,在面向对象里通常称为方法 注意:类和对象均 ...
- python基础之继承组合应用、对象序列化和反序列化,选课系统综合示例
继承+组合应用示例 1 class Date: #定义时间类,包含姓名.年.月.日,用于返回生日 2 def __init__(self,name,year,mon,day): 3 self.name ...
- sqlalchemy mark-deleted 和 python 多继承下的方法解析顺序 MRO
sqlalchemy mark-deleted 和 python 多继承下的方法解析顺序 MRO 今天在弄一个 sqlalchemy 的数据库基类的时候,遇到了跟多继承相关的一个小问题,因此顺便看了一 ...
- Python进阶-继承中的MRO与super
Python进阶-继承中的MRO与super 写在前面 如非特别说明,下文均基于Python3 摘要 本文讲述Python继承关系中如何通过super()调用"父类"方法,supe ...
- 7 python 类的组合
1.组合与重用性 软件重用的重要方式除了继承之外还有另外一种方式,即:组合 组合指的是,在一个类中以另外一个类的对象作为 1.一个类的属性可以是一个类对象,通常情况下在一个类里面很少定义一个对象就是它 ...
随机推荐
- pat1064. Complete Binary Search Tree (30)
1064. Complete Binary Search Tree (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHE ...
- js 独立命名空间,私有成员和静态成员
独立的命名空间 1可以避免全局变量污染. 全局变量污染不是 说 被全局变量污染,而是说不会污染全局变量. 2实现私有成员. 在js中函数 就可以满足独立的命名空间的两点需求. 如: ...
- vue resource patch方法的传递数据 form data 为 [object Object]
今天在测试 iblog 登录时,传送过去的数据总是 [object Object],以至于后台识别不出来. vue 使用了 vueResource 组件,登录方法为 patch. 经过探索,终于在官网 ...
- UGUI的事件系统分析
UGUI的源码还是非常清晰的,打开源码可以发现, 从UGUI的源码可知:在EventSystem中调用每一帧函数来实现: private void TickModules() { for (var i ...
- tcpick
tcpick 是一款基于文本的嗅探器,能追踪,重组和重排tcp流.
- python decorator 用法
https://www.zhihu.com/question/31265857 http://www.cnblogs.com/huxi/archive/2011/03/01/1967600.html ...
- Winform调整DEV控件高度
- hihoCoder #1044 : 状态压缩·一 (清垃圾)
题意: 某车厢有一列座位,共有n个位置,清洁工要在这n个位置上清垃圾,但是不能全部位置都清理,只能选择部分.选择的规则是,连续的m个位置内,不能够清理超过q个,也就是说从第1~m个位置最多可以清q个, ...
- bootstrap table保留多选框的分页
有时候需要完成这种情况: 1.需要设置的是如果第一页点击复选框然后点击其他页面的话,第一页的选项被保存了 2.将所有选择好的复选款的数据保存在数组中 bootstrap table官方文档http:/ ...
- 【BZOJ2427】[HAOI2010] 软件安装(缩点+树形DP)
点此看题面 大致题意: 有\(N\)个软件,每个软件有至多一个依赖以及一个所占空间大小\(W_i\),只有当一个软件的直接依赖和所有的间接依赖都安装了,它才能正常工作并造成\(V_i\)的价值.求在容 ...