面向对象高级

python中一切皆对象,

isinstance()判断某个对象是否为某个类的实例

issubclass()哦安短一个类是不是另一个类的子类

反射:

反省,对象具备一种修正错误的能力

hasattr 是否存在某个属性

getattr 获取某个属性的值

setattr 设置某个属性的值

delattr 删除某个属性

反省就是通过字符串操作属性

当不清楚对象细节时,就可以使用反省

在编写代码期间,明确知道访问的属性没有必要使用反射

不清楚时需要使用反射

可以通过反射的方式为对象增加一个方法,这样的方式增加的方法只是一个普通函数不会自动传值

前后都有双下划线的函数为内置函数,在特定时期自动执行,一般不会直接调用

当需要自定义打印显示内容时,需要覆盖__str__方法,该方法必须返回一个字符串

将一个对象转换字符串时本质就是在调用这个对象__str__方法

__del__当对象被从内存中删除时会自动执行,手动删除也会执行

python中1有自动内存管理机制,所以python自动创建的数据不需要操作,

当使用python打开不属于python管理的数据时,就需要使用__del__关闭系统资源

__del__被称为析构函数

exec:execute的缩写,执行,作用:帮助解析执行python代码,并将得到的名称存储到指定的名称空间

解释器内部也是调用它来执行代码的

参数一:需要一个字符串对象,表示要执行的python语句

参数二:是一个字典,表示全局名称空间

参数三:也是字典,表示局部名称空间

如果同时指定全局与局部,则会将字符串中表示名称解析后存到局部中

如果只传一个参数则将字符串中包含名称解析后存到全局中

一切皆对象,元类指用于产生类的类,type就是元类

所有的自定义类都是通过type实例化得来

创建模块的过程:

1.创建一个空的名称空间

2.执行内部的代码

3.将得到的名字放到名称空间中

类也是对象,使用type可以发现,类就是type类的实例(对象)

可以自己调用type来实例化产生一个类

类是由type实例化产生的

可以使用type产生一个类

一个类是由类名,类的父类元组,类的名称空间三个部分组成

__call__

在对象被调用时执行,

自定义元类的目的:

1.可以通过__call__来控制对象的创建过程

2.可以控制类的创建过程

自定义元类需要继承type

生成对象的三步

1.创建空对象 

obj= object.__new__(self)

2.调用初始化方法

self.__init__(obj,*args,**kwargs)

3.得到一个完整的对象

return obj

当调用对象时,会执行该对象所属类中的__call__方法

要控制类的创建过程,只要找到类所属的类中的__init__即可

父类中创建子类对象所需的四个参数:

1.self,需要创建的类

2.类的名字

3.类的所有父类,类型为元组

4.这个类的名称空间

可以通过__doc__获取文档注释

也可以在类的__init__控制该类对象的创建过程

元类使用总结:

元类是用于创建类的类,使用元类是为了控制类的创建过程,以及类实例化对象的过程

一.

控制类的创建过程

1.创建一个元类(需要继承type)

2.覆盖__init__方法,该方法会将创建的对象,类名,所有父类,名称空间都传进来

可以利用这些信息进行控制过程

3.对于需要被控制的类,需要指定metaclass为上面的元类

二:

控制类实例化对象的过程

1.创建一个元类(需要继承type)

2.覆盖__call__方法,会将正在实例化对象的类调用类时传递的参数都传进去

3.在__call_-方法中,必须要编写模板代码

3.1创建空对象

3.2调用类的__init__方法来初始化这个空对象

3.3返回该对象

4.加入需要控制的逻辑

类的三个组成部分:

类名 父类门 名称空间

元类--->实例化产生----->类-------->实例化产生----------->对象

单例模式:

单个实例的模式,即一个类只有一个实例化对象

通过控制__call__方法实现

类有一个名为__init__()的特殊方法(构造方法),该方法会在类实例化时自动调用,类定义了__init__()的方法,类的实例化操作会

自动操作调用__init__()方法,该方法可以有参数

原文地址:https://www.cnblogs.com/suncunxu/p/10142788.html