博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python全栈开发——类继承和组合
阅读量:5348 次
发布时间:2019-06-15

本文共 3338 字,大约阅读时间需要 11 分钟。

# 类组合 将几个不相关的类组合在一起 #什么时候用:当类之间有显著的不同,并且较小的类是较大的类所需组件时,用组合
class School:    def __init__(self,name,addr):        self.name=name        self.addr=addr    def zhao_sheng(self):        print('%s is ' %self.name)class Course:    def __init__(self,name,price,period,school):        self.name=name        self.price=price        self.period=period        self.school_lujiacheng=schools1=School('oldboy','BeiJing')c1=Course('boydoy','1000',15,s1)   #建立关系#访问print(c1.school_lujiacheng.name)    #oldboyprint(c1.school_lujiacheng.addr)    #BeiJing
#继承  #当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好 #继承的两种含义 #1.继承基类的方法,并做出自己的扩展(代码重用(强耦合,意义不是很大)少用) #2.声明某个子类兼容于某基类,定义一个接口类,子类继承接口类,并实现接口中定义的方法(归一化继承)
#子类创建数据属性和函数属性,实例化后会先找子类中的属性
class Dad:    money=10    def __init__(self,name):        print('爸爸')        self.name=name    def hit_son(self):        print('%s 正在打儿子' %self.name)class Son(Dad):    money = 10000000    def __init__(self,name,age):        self.name=name        self.age=ages1=Son('alex','19')print(s1.name)     #10000000print(s1.money)   #'alex's1.hit_son()

 

#继承顺序  #1.当类是经典类时,多继承情况下,会按照深度优先方式查找 #2.当类是新式类时,多继承情况下,会按照广度优先方式查找 #Python2.x灰分经典类和新式类,Python3.x统一为新式类 #深度优先 # F->D->B->A->E->C #从左找起 #广度优先 # F->D->B->E->C->A #从左找起
class A:    def test(self):        print('A')class B(A):    def test(self):        print('B')class C(A):    def test(self):        print('C')class D(B):    def test(self):        print('D')class E(C):    def test(self):        print('E')class F(D,E):    pass    # def test(self):    #     print('F')f1=F()f1.test()  #F->D->B->E->C->A 实在找不到才会去找A类
 
#接口继承,第二中继承方式(更好)(归一化设计)  #基类中只定义方法,不写功能。而在继承基类中的类必须定义基类中所有的方法,不然会报错
import abcclass All_file(metaclass=abc.ABCMeta):#限制继承基类中的类必须定义基类中所有的方法    @abc.abstractmethod    def read(self):        pass    @abc.abstractmethod    def write(self):        pass    class Disk(All_file):    def read(self):        print('Disk is reading')    def write(self):        print('Disk is writing')        class Mess(All_file):    def read(self):        print('Mess is reading')    def write(self):        passm1=Mess()
 
#子类中调用父类的方法  #1.这种方法扩展性差(一般不用,也不会用)
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('正在跑......')class Subway(Vehicle):    def __init__(self,name,speed,load,power,line):          Vehicle.__init__(self,name,speed,load,power) #这样调用父类方法        self.line=line    def run(self):        Vehicle.run(self)          #调用父类line1=Subway('13号线','13Km','100kg','电','line')print(line1.__dict__)  #{'name': '13号线', 'speed': '13Km', 'load': '100kg', 'power': '电', 'line': 'line'}line1.run()
#第二种调用(更好)
#super()
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('正在跑......')class Subway(Vehicle):    def __init__(self,name,speed,load,power,line):        # 这样调用父类方法        #super().__init__(name,speed,load,power)#相当于下面的方法        super(Subway,self).__init__(name,speed,load,power)        self.line=line    def run(self):        super().run()        #这样调用父类方法line1=Subway('13号线','13Km','100kg','电','line')line1.run()      #正在跑......

 

转载于:https://www.cnblogs.com/lujiacheng-Python/p/9733876.html

你可能感兴趣的文章
学习 KJFrameForAndroid
查看>>
使用Cacti监控你的网络(四)- Cacti脚本及模板
查看>>
第一个GUI
查看>>
一道简单的dp题 --- Greenhouse Effect CodeForces - 269B
查看>>
SQLServer之触发器简介
查看>>
CentOS-7 部署Django----安装数据库环境
查看>>
SpringMVC---简单登录例子
查看>>
141. Linked List Cycle
查看>>
spark-submit提示资源不足
查看>>
快速创建一个 Servlet 项目(2)
查看>>
tomee.xml
查看>>
Cisco WebEx设备ssl证书安装指南
查看>>
[bzoj省选十连测推广赛2]T2七彩树
查看>>
Qt Widget 在点击了主窗口右上角的叉叉时候,程序没有结束问题
查看>>
无题,李商隐,哈哈哈,随便写写
查看>>
微信支付(java版本)_支付结果通知
查看>>
LeetCode 476. Number Complement
查看>>
深度解密Go语言之context
查看>>
The postulate written ghd australia outlet
查看>>
windows 7、Windows10 系统目录迁移,修改安装的默认路径:Users,Program Files,ProgramData
查看>>