Python脱产8期 2019/5/17

一 继承的另一种使用方式

1.最常见的是直接继承一个已经存在的类(就是父类已经存在了,不需要自己去进行创建),自己可以在子类中进行补充其他的功能

2注意:如果在子类中覆盖父类的init初始函数时,要调用super()函数

3.例:

class MyList(list):
def __init__(self,element_cls):
# 当你覆盖了init方法时
# 不要忘记调用super().init函数让父类完成原有的初始化操作
super().__init__()
self.element_cls = element_cls


def append(self, object):
# if isinstance(object,str) # 判断要存储的元素是否是指定类型
if object.__class__ == self.element_cls:
super().append(object)
else:
print("只能存储%s类型!" % self.element_cls.__name__)

 

4.

问题:多继承时如果多个父类中出现了同名的属性/函数
# 你不能用眼睛去判断查找顺序 ,需要使用mro列表来查看真正的继承顺序
# 总结:super在访问父类属性时 是按照mro列表一层层往上找的,不太建议使用多继承

例:

class A:
# a = 1
pass

class B(A):
# a = 2
pass

class C(A):
# a = 3
pass

class D(A):
# a = 4
pass

class E(B,C,D):
# a = 5
pass

e1 = E()
# print(e1.a)

# E B C D A object
#
# E B A C D
# print(E.mro())

组合:

1.什么是组合:一个类的对象作为另一个类的属性,称之为组合

2.例:

 

class PC:
def open_app(self,app_name):
print("open %s" % app_name)

class OldBoyStudent:
def __init__(self,PC,notebook):
self.PC = PC
self.notebook = notebook
pass

pc = PC()
notebook = PC()


stu = OldBoyStudent(pc,notebook)
# stu.PC.open_app("pycharm")
stu.notebook.open_app("pycharm")

菱形继承:

1.概念:一个类有多个父类,同时这些父类又有同一个父类.

2.新式类:继承object的类都是新式类,py3中都是新式类(菱形继承c3算法,先深度后广度)

3.经典类:没有继承object的类是经典类,只有py2中才有(菱形继承中,深度优先)

接口 

1.什么是接口:接口其实就是一组功能的定义,但是只清楚函数名称,而没有具体的实现细节(没有函数体的函数)

class USB:

   def open(self):
   pass

   def close(self):
   pass

   def work(self):
pass

2.好处:提高程序的拓展性

抽象类

1.什么是抽象类:没有函数体的函数,若存在类中这个类就是抽象类采用,@abc.abstractmethod 装饰器来声明

2.注意:拥有抽象的类不能和他的子类不能实例化,子类必须覆盖父类的抽象方法子类才能实例化

3.例:

import abc

class Test(metaclass=abc.ABCMeta):

@abc.abstractmethod
def say_hi(self):
pass

def info(self):
print("my class is Test")

class TT(Test):

def say_hi(self):
print("i am TT obj")

鸭子类型

 
 

1.什么是鸭子:说如果一个对象叫声像鸭子,走路像鸭子,长得像鸭子,那它就是鸭子(就是把一个类的对象作为另一个类对象的的函数参数再来调用作为参数的对象的功能体)

2.例

class PC():

def conntent_device(self, usb_device):
usb_device.open()
usb_device.work()
usb_device.close()


class Mouse:
# 实现接口规定的所有功能
def open(self):
print("mouse opened")

def work(self):
print("mouse working...")

def close(self):
print("mouse closed")

mouse = Mouse()
pc = PC()

pc.conntent_device(mouse)

 





 

 
 
 

转载于:https://www.cnblogs.com/tfzz/p/10882250.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值