面对对象进阶

面对对象进阶

1.mixins机制

为解决多继承的关系混乱问题,将父类分为主类和辅类.主类才是主要要继承的,辅类通常只有一个功能(功能较少).

在类命名的时候以Mixin,able结尾的,认为是辅类,继承的时候写在主类前面,可以有多个,主类只有一个.

本质还是多继承。

2.内置方法

在某些条件下会自动执行的方法称为内置方法

__init__
在实例化的时候自动运行
__str__
在print对象的时候自动运行类中的__str__,并打印返回值
__del__                                                
在清理对象的时候自动运行,可以是主动调用,也可以是程序结束的时候自动调用,主要用于释放对象中某些属性占用的操作系统资源。调用方式:del 对象。

还有很多

3.反射

目的:可以通过字符串来操作对象的属性
定义:在程序运行中,能自动获知类或对象的属性,并且可以调用

怎么实现?

老方法:(不推荐)
obj.__dict__返回属性字典
dir(obj)返回属性列表

python提供的4个内置函数,可以通过字符串来操作对象的属性:
hasattr:判断对象有没有该属性      hasattr(obj,"name")  返回True or False
getattr:获取属性的值或绑定方法,绑定方法可以加括号运行    getattr(obj,"name")  返回obj.name
setattr:修改    setattr(obj,"name","EGON")   相当于obj.name="EGON"
delattr:删除    delattr(obj,"name")   相当于del obj.name


4.元类(没讲)

元类就是定义类这个对象的"类",即"type"

class产生类的机制】
1.类名
class_name
2.类的基类
class_bases
3.运行类体代码,产生名称空间
class_body="""代码"""
class_dic ={}
exec(class_body,{},class_dic)
4.调用元类
"类名"=type(class_name,class_bases,class_dic)


如何自定义元类来控制类的产生?
自定义元类一定要继承元类
class my_class(metaclass="自定义元类")

__new__是定义在元类中的,和init类似
实例化中造一个空对象的本质就是调用了__new__方法


自定义类的产生或者说实例化的过程分为:
1.先造一个空对象=>类    调用__new__
2.调用元类(类)中的init方法,完成类的初始化
3.返回初始化好的类    

上面的三部本质是调用了__call__方法
但凡可以加括号运行的对象,其类中都有__call__方法


补充

isinstance(“aaa”,int)#判断是不是该类型

issubclass()#判断是不是子类

raise     主动抛出异常
	raise NameError("错误提示")
posted @ 2021-07-30 16:29  hai437  阅读(24)  评论(0编辑  收藏  举报