码迷,mamicode.com
首页 > 其他好文 > 详细

7.29 多态

时间:2019-07-29 16:09:05      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:instance   转换   内存区域   接口   方法   存在   block   使用   符号   

多态


一种事物具备多种不同形态

水 固态 液态 气态

大黄蜂 汽车人 汽车

官方解释:多个不同类的对象可以响应同一个方法,产生不同的结果

首先强调多态不是一种特殊的语法,而是一种状态,特性(即多个不同对象可以响应同一个方法,产生不同的结果

多个对象有相同的使用方法

好处:对于使用者而言,大大的降低了使用难度

我们之前写的USB接口,下的鼠标、键盘就属于多态

实现多态的手段:鸭子类型(最简单),继承:接口;抽象类

'''
要管理 鸡 鸭 鹅
如何最方便的管理:
说同一句话,他们都能理解
他们拥有相同的方法
'''
# 下面这个也算鸭子??类型

class chicken:
    def bark(self):
        print('gege')
    def spawn(self):
        print('下鸡蛋')

class duck:
    def bark(self):
        print('yaay')
    def spawn(self):
        print('下鸭蛋')

class E:
    def bark(self):
        print('eeee')
    def spawn(self):
        print('下e蛋')

chicken = chicken()  # 创建对象
duck = duck()
E = E()

def manage(obj):
    obj.spawn()

manage(chicken)  # 下鸡蛋
manage(duck)  # 下鸭蛋
manage(E)  # 下e蛋

魔法函数


isinstance

判断一个对象是否是某个类的实例

参数1 要判断的对象

参数2 要判断的类型

def add_num(a,b):

    # if type(a) == int and type(b) == int:
    #     return a+b  
    # 这是我们原来的判定方法

    if isinstance(a,int) and isinstance(b,int):
        return  a+b
    # 这是使用isinstance的写法


print(add_num(5,15))  # 20
print(add_num(2,'6'))  # None

issubclass

判断一个类是不是另一个类的子类

参数1 是子类

参数2 是父类

str

__str__ 会在对象被转换为字符串时

del

执行时机:手动删除对象时
使用场景:当你的对象在使用过程中,打开了不属于解释器的内容,例如文件,网络端口

call

执行时机:

____slots

该属性是一个类属性

python是动态语言

可以在运行期间,动态的修改对象的属性

如何存储更多属性?

需要开启更大的内存区域,将原始的属性赋值过去

这里有一个问题:

如果开启的容量太大

将造成内存的浪费

解决方案

Getattr stattr delattr

attr就是属性

getattr 用点访问属性石如果属性不存在时执行
setattr 用点设置属性时
delattr 用 del 对象.属性 删除属性时 执行

这几个函数反应

任何的符号 都会被解释器解释成特殊含义 例如 [ ] ( )

7.29 多态

标签:instance   转换   内存区域   接口   方法   存在   block   使用   符号   

原文地址:https://www.cnblogs.com/PowerTips/p/11264371.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!