一、魔法函数与协议
在python中可以把魔法函数看作是python内置的一些接口和协议。不同的类型由不同的协议构成,当我们实现了某种协议,实际上就可以认为满足这种类型。
在python中有一个模块collections的abc抽象类中,给我们提供了实现这些类型需要继承的方法。(可以把他看做python给我们提供的文档)
魔法函数是对于类型拥有的行为的约束。(行为约束)
python更加注重的是对象拥有的行为,而不是它属于哪个类型。(isinstance方法的实质)
最特殊的两个魔法函数:
_ new__和__init_
二、元类,类和实例之间的关系
元类:能够创建类的类,我们称作元类,type就是最原始的一个元类。
如果要自定义元类,必须要显示继承于type类。class Model(object,metaclass=type):pass
类:也叫类对象,python中一切皆是对象,类对象 是由 type 类实例化产生 ,(type也是一个类,它还实例化自己,这就做到了一些皆对象)也就是 type 类中的__new__方法。
实例对象:而实例对象是由该类的__new__方法进行创建对象。
type有两个用处:
1.type当做函数用,同__class__属性作用相同,返回对象的类型
2.type当做类用,是元类,用于创建其它的类。
class meta(type):
def __new__(cls, *args, **kwargs):
print("i am meta")
return super().__new__(cls,*args,**kwargs)
class obj(object):
def __new__(cls, *args, **kwargs):
print("i am obj")
return super().__new__(cls)
class BaseModel(obj,metaclass=meta):
def __init__(self):
pass
user =BaseModel()
结果:
i am meta
i am obj