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.一个类的属性可以是一个类对象,通常情况下在一个类里面很少定义一个对象就是它 ...
随机推荐
- 用CSS控制图片大小显示的方法
图片自动适应大小是一个非常常用的功能,在进行制作的时候为了防止图片撑开容器而对图片的尺寸进行必要的控制,我们可不可以用CSS控制图片使它自适应大小呢? 可以通过按比例缩小或者放大到某尺寸(自己指定), ...
- iOS开发ReactiveCocoa学习笔记(三)
RAC常用用法: 1.监听按钮的点击事件: UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; button.frame ...
- ifream页面弹出框遮盖层覆盖父页面
1.首先找到子页面上遮罩层的id, 2.然后再父页面编写个js方法 function shade() { $(".layui-layer-shade").height($(wind ...
- pandas error记录随笔
1.sys:1: DtypeWarning: Columns (0,1) have mixed types. Specify dtype option on import or 解决办法:PANDAS ...
- Android仿微信高效压缩图片(libjpeg)
用过ios手机的同学应该很明显感觉到,ios拍照1M的图片要比安卓拍照排出来的5M的图片还要清晰.这是为什么呢? 这得了解android底层是如何对图片进行处理的. 当时谷歌开发Android的时候, ...
- zabbix-3.4-服务监控
服务监控 总览 服务监控(services monitoring)旨在帮助那些想要高级(业务)基础设施的监控的人.在许多情况下,我们关注的不是底层细节,比如磁盘空间不足.CPU 负载高等.我们关注的是 ...
- Google Authenticator加强ssh安全
一.安装依赖包 软件包可以在这个地址下载:https://pan.baidu.com/s/1r0CmwbtCfNiBqU9rh_TxtA yum -y install pam-devel tar jx ...
- 汶川大地震中的SAP成都研究院
5·12汶川地震,发生于北京时间(UTC+8)2008年5月12日(星期一)14时28分04秒,此次地震的面波震级 里氏震级达8.0Ms.矩震级达8.3Mw,地震烈度达到11度.地震波及大半个中国及亚 ...
- 为PyCharm添加不同解释器
正常大家会使用Python官网的安装包,即Python.由于自己尝试了下IronPython,但打开PyCharm查看配置,发现并没有IronPython的解释器,这个需要自己加进去,如图: &quo ...
- 【洛谷2279】[HNOI2003] 消防局的设立(贪心)
点此看题面 大致题意: 给你\(N\)个点(其中\(1\)号点为根),并告诉你编号为\(2\sim N\)的点的父亲(\(fa[i]<i\)),现在要在树上选择尽量少的关键点(消防局),使得任意 ...