python封装enclosure_python enclosure

动态(运行时状态)

说明:

python全部对象都只有运行时状态,没有编译时状态

多继承 multiple inheritance

多继承是指一个子类继承自两个或两个以上的基类

语法:

class 类名(基类名1, 基类名2, …):

语句块

说明:

一个子类同时继承自多个父类,父类中的方法可以同时被继承下来

如果两个父类中有同名的方法,而在子类中又没有覆盖此方法时,调用结果难以确定

多继承的问题(缺陷)

标识符冲突的问题

要谨慎使用多继承

多继承的问题MRO(method resolution order)问题

类的 __mro__属性

用来记录每个类的方法的查找顺序

用MRO来确定钻石继承的方法查找顺序

A

/ \

B C

\ /

D

面向对象编程语言特征

封装

继承

多态

面向对象的编程语言:

C++, C#, Python, Java, objective-c, swift, …

函数(方法)重写

在自定义的类内添加相应的方法,让自定义的类创建的实例像内建对象一样进行内建函数操作

对象转字符串函数的重写(覆盖)

repr(obj) 返回一个符合Python语法规则的字符串:

通常:

eval(repr(obj)) == obj

str(obj) 通过给定的对象返回一个字符串(这个字符串通常是给人阅读的)

说明:

1. str(obj) 函数先查找obj.__str__() 方法,调用此方法并返回结果

2. 如果obj.__str__() 方法不存在,则调用obj.__repr__()方法并返回结果

3. 如果obj.__repr__方法不存在,则调用object类的__repr__实例方法显示<__main__.XXX object at 0xAABBCCDD>格式的字符串

重载方法:

repr() 函数对应 def __repr__(self):

str() ---------> def __str__(self):

内建函数的重写

__abs__      abs(obj)

__len__      len(obj)

__reversed__   reversed(obj)

__round__     round(obj)

数据转换函数重写

__complex__    complex(obj)

__int__      int(obj)

__float__     float(obj)

__bool__     bool(obj)

布尔测试函数重写

作用:

用于bool(obj) 函数取值

用于if语句真值表达式取值

用于while 语句真值表达式取值

方法名: __bool__

说明:

当存在__bool__方法时,调用obj.__bool__() 取值

当不存在__bool__方法时,调用obj.__len__() 取值

当再不存在__len__方法时,直接返回True

迭代器(高级)

迭代器可以能过next(obj) 函数取值的对象,就是迭代器

迭代器协议:

迭代器协议是指对象能够使用next函数获取下一项数据,在没有下一项数据时触发一个StopIteration异常来终止迭代的约定

迭代器协议的实现方法:

__next__(self)

可迭代对象:

是指能用iter(obj) 函数返回迭代器的对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值