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之继承组合的更多相关文章

  1. day25 python学习 继承,钻石继承 多态

    ---恢复内容开始--- 通过一个列子认识父类和子类中,子类的如何实现对父类默认属性调用,同时拥有自己的属性,如何在子类中调用父类的方法,class Ainmal: country='afdas' d ...

  2. day25 python学习 继承,钻石继承

    通过一个列子认识父类和子类中,子类的如何实现对父类默认属性调用,同时拥有自己的属性,如何在子类中调用父类的方法,class Ainmal: country='afdas' def __init__(s ...

  3. python基础——继承与派生、组合

    python基础--继承与派生 1 什么是继承: 继承是一种创建新的类的方式,在python中,新建的类可以继承自一个或者多个父类,原始类成为基类或超累,新建的类成为派生类或子类 1.1 继承分为:单 ...

  4. Python开发基础-Day19继承组合应用、对象序列化和反序列化,选课系统综合示例

    继承+组合应用示例 class Date: #定义时间类,包含姓名.年.月.日,用于返回生日 def __init__(self,name,year,mon,day): self.name = nam ...

  5. python面向对象编程 继承 组合 接口和抽象类

    1.类是用来描述某一类的事物,类的对象就是这一类事物中的一个个体.是事物就要有属性,属性分为 1:数据属性:就是变量 2:函数属性:就是函数,在面向对象里通常称为方法 注意:类和对象均用点来访问自己的 ...

  6. Py修行路 python基础 (十五)面向对象编程 继承 组合 接口和抽象类

    一.前提回忆: 1.类是用来描述某一类的事物,类的对象就是这一类事物中的一个个体.是事物就要有属性,属性分为 1:数据属性:就是变量 2:函数属性:就是函数,在面向对象里通常称为方法 注意:类和对象均 ...

  7. python基础之继承组合应用、对象序列化和反序列化,选课系统综合示例

    继承+组合应用示例 1 class Date: #定义时间类,包含姓名.年.月.日,用于返回生日 2 def __init__(self,name,year,mon,day): 3 self.name ...

  8. sqlalchemy mark-deleted 和 python 多继承下的方法解析顺序 MRO

    sqlalchemy mark-deleted 和 python 多继承下的方法解析顺序 MRO 今天在弄一个 sqlalchemy 的数据库基类的时候,遇到了跟多继承相关的一个小问题,因此顺便看了一 ...

  9. Python进阶-继承中的MRO与super

    Python进阶-继承中的MRO与super 写在前面 如非特别说明,下文均基于Python3 摘要 本文讲述Python继承关系中如何通过super()调用"父类"方法,supe ...

  10. 7 python 类的组合

    1.组合与重用性 软件重用的重要方式除了继承之外还有另外一种方式,即:组合 组合指的是,在一个类中以另外一个类的对象作为 1.一个类的属性可以是一个类对象,通常情况下在一个类里面很少定义一个对象就是它 ...

随机推荐

  1. hide(),show()

    var newstypevalue =$("#newstype option:selected").val();        if(newstypevalue=='0'){   ...

  2. Redis中的LRU淘汰策略分析

    Redis作为缓存使用时,一些场景下要考虑内存的空间消耗问题.Redis会删除过期键以释放空间,过期键的删除策略有两种: 惰性删除:每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除 ...

  3. 敏捷开发(Agile development)

    敏捷开发(Agile development) 敏捷开发是一种以人为核心.迭代.循序渐进的开发方法.在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征. ...

  4. Java语言程序设计(第三版)第二章课后习题答案(仅供参考)

    2.1   注意不同类型转换 import java.util.Scanner; public class Ch02 { public static void main(String[] args) ...

  5. OpenCV之cvAddWeighted直接C语言实现版addWeighted,应对上下平滑融合拼接

    关于OpenCV中的cvAddWeighted的介绍可参见<opencv中的cvAddWeighted函数> cvAddWeighted有个问题,它只能实现两张图片的直接融合,往往产生明显 ...

  6. 【Linux/Ubuntu学习 11】git查看某个文件的修改历史

    有时候在比对代码时,看到某些改动,但不清楚这个改动的作者和原因,也不知道对应的BUG号,也就是说无从查到这些改动的具体原因了- [注]:某个文件的改动是有限次的,而且每次代码修改的提交都会有commi ...

  7. Android——dpi相关知识总结

    1.术语和概念 术语 说明 备注 Screen size(屏幕尺寸) 指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸...... nexus4手机是4.7英寸 As ...

  8. cocos2d-x 学习资料汇总

    cocos2d-x配置问题 - 我要飞的更高 - 博客频道 - CSDN.NET Cocos2d-x win7 + vs2010 配置图文详解(亲测) - 子龙山人 - 博客园 WINDONWS7+V ...

  9. LeetCode Word Ladder 找单词变换梯

    题意:给出两个单词,以及一个set集合,当中是很多的单词.unordered_set是无序的集合,也就是说找的序列也是无序的了,是C++11的标准,可能得升级你的编译器版本了.要求找出一个从start ...

  10. HDU 2955 Robberies抢劫案(01背包,变形)

    题意:要抢劫,但是抢每个银行都有被抓的概率,问在低于规定的被抓概率情况下最多能抢到多少钱. 输入:第一行为T,表示共T个测试例子.每个例子的第一行给出一个浮点数P,是规定被抓的概率上限.第一行还有一个 ...