Python全栈开发——类继承和组合

# 类组合将几个不相关的类组合在一起#什么时候用:当类之间有显著的不同,并且较小的类是较大的类所需组件时,用组合
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=school
s1=School(‘oldboy‘,‘BeiJing‘)

c1=Course(‘boydoy‘,‘1000‘,15,s1)   #建立关系
#访问
print(c1.school_lujiacheng.name)    #oldboy
print(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=age

s1=Son(‘alex‘,‘19‘)
print(s1.name)     #10000000
print(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 abc
class 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):
        pass
m1=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

时间: 2024-11-07 22:58:30

Python全栈开发——类继承和组合的相关文章

Python全栈开发【第一篇】:初识Python

Python全栈开发[第一篇] 本节内容: Python 的种类 Python 的环境 Python 入门(解释器.编码.变量.input输入.if流程控制与缩进.while循环) if流程控制与while循环练习题 基本数据类型前引 Python 的种类 Cpython Python的官方版本,使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上. Jyhton Python的Java实现,Jython会将Pyth

Python全栈开发【基础二】

Python全栈开发[基础二] 本节内容: Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 基本数据类型(数字.布尔值.字符串.列表.元组.字典) 编码与进制转换 Python 运算符 1.算术运算: 2.比较运算: 3.赋值运算: 4.逻辑运算:  5.成员运算: 基本数据类型 1.数字 int(整型) 1 class int(object): 2 """ 3 int(x=0) -> integer 4 int(x, base=10) -&g

python全栈开发目录

python全栈开发目录 linux命令 初识python python基础数据类型 函数编程.set.深浅拷贝 内置函数 文件操作 装饰器 迭代器和生成器 常用模块 初识类和对象 类和对象(进阶) 反射 异常处理 socket.IO多路复用 线程.进程.协程 HTML CSS JavaScript DOM文档操作 jQuery实例 web框架本质 Tornado mysql基础 mysql进阶 ..... 基本算法 递归--二分法查找 冒泡排序 更多 线程池

Python 全栈开发:python列表List

列表 列表是python中经常使用的数据类型,用于存放多个值. 表现形式:在[ ]内用逗号分隔,可以存放n个任意类型的值 eg: #单一类型 users=['yangli','yite','fixd'] #多类型,列表嵌套 users=['room01',['yangli',20,'音乐'],['yite',20,'篮球'],] 列表常用方法 和 函数 方法 函数 常用的操作 eg: len(list) #len(list) 计算列表的长度 ls = ['a','b','c','d'] leng

Python全栈开发【基础三】

Python全栈开发[基础三]  本节内容: 函数(全局与局部变量) 递归 函数 一.定义和使用 函数最重要的是减少代码的重用性和增强代码可读性 1 def 函数名(参数): 2 3 ... 4 函数体 5 ... 6 返回值 函数的定义主要有如下要点: def:表示函数的关键字 函数名:函数的名称,日后根据函数名调用函数 函数体:函数中进行一系列的逻辑计算 参数:为函数体提供数据 返回值:当函数执行完毕后,可以给调用者返回数据. 总结使用函数的好处: 1.减少代码重用 2.保持一致性,易维护

Python全栈开发

Python全栈开发 一文让你彻底明白Python装饰器原理,从此面试工作再也不怕了. 一.装饰器 装饰器可以使函数执行前和执行后分别执行其他的附加功能,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator),装饰器的功能非常强大,但是理解起来有些困难,因此我尽量用最简单的例子一步步的说明这个原理. 1.不带参数的装饰器 假设我定义了一个函数f,想要在不改变原来函数定义的情况下,在函数运行前打印出start,函数运行后打印出end,要实现这样一个功能该怎么实现?看下面如何用

Python全栈开发【基础四】

Python全栈开发[基础四] 本节内容: 匿名函数(lambda) 函数式编程(map,filter,reduce) 文件处理 匿名函数 lambda表达式:对于简单的函数,存在一种简便的表示方式,即lambda表达式 1 #这段代码 2 def calc(n): 3 return n**n 4 print(calc(10)) 5 6 #换成匿名函数 7 calc = lambda n:n**n 8 print(calc(10)) 匿名函数主要是和其它函数搭配使用 举例: 1 ########

自学Python全栈开发第一次笔记

我已经跟着视频自学好几天Python全栈开发了,今天决定听老师的,开始写blog,听说大神都回来写blog来记录自己的成长. 我特别认真的跟着这个视频来学习,(他们开课前的保证书,我也写了一份,哈哈哈...)我现在是准大学生,准备学习编程,日后做一个程序员,哈哈哈.听说程序员很苦逼,不过貌似挣得也很多啊.并且我貌似也只喜欢计算机这个方面,所以我想在这个行业发光. 前些天学习了一些Linux一些命令: pwd     查看你当前所在的目录  /root=计算机/E盘 /    是根目录 cd(ch

Python 全栈开发:python元组tuple

元组 什么是元组:"元组就是一个不可变的列表" (并不是列表,只是为了便于记忆) 用途:用于存放多个值,只能读不能二次赋值 表现形式:小括号()中间以逗号分割各个元素 eg: tuples = ('a','b','c','d') 元组常用的操作 生成一个简单的元组 tuples = tuple(range(5)) print(tuples) #结果(0, 1, 2, 3, 4) len(tuple) #计算元组长度 tuples = (0, 1, 2, 3, 4) print(len(