python的类,元类

类实例化过程:
例子:  class Custom:
def __init__(self):
print("Init method")

def __new__(cls,*args,**kwargs):
print("new Instance")
return object.__new__(cls,*args,**kwargs)
if __name__ == '__main__':
Custom()
运行结果:
new Instance
Init method

类也是一个对象,但是具有创建其自身实例的能力。
类可以和一个变量进行绑定
可以为类增加属性
可以将类作为函数的参数传递

==============================================
元类(type)
类的创建和管理者
所有的类都是元类(type)的实例
元类实例化的过程:
__new__()
__init__()
目的:对其创建的类进行预处理

Python3.x中对元类的应用
类继承中提供关键字参数:metaclass=元类名
Python3.x中对元类的应用
定义一个模块级变量: __metaclass__=元类名
为某个类添加类属性: __metaclass__=元类名

自定义元类(Python3中)
例子: class MyMeta(type):
def __init__(self,name,bases,dicts):
print("init method")

def __new__(cls,name,bases,dicts):
#给元类添加一个方法
dicts['info'] = lambda self:print('Djx')
#创建实例对象
res = type.__new__(cls,name,bases,dicts)
#给元类添加一个属性
res.company = 'Maizi'
return res

#Python3.x中对元类的应用
class custom(metaclass=MyMeta):
pass

#Python2.x中对元类的应用
class cust:
__metaclass__ = MyMeta
pass
#一个模块级变量
#__metaclass__ = MyMeta

if __name__ == '__main__':
cus = custom()
cus.info()
print(cus.company)
运行结果:
init method
Djx
Maizi

构造序列类
实现以下方法:
__len__(self)
__getitem__(self,key)
__setitem__(self,key,value)
__delitem__(self,key)

构造迭代器iter
实现以下方法:
__iter__(self)
__next__(self)

构造可比较类
实现以下方法:
__lt__()
__le__()
__gt__()
__ge__()
__eq__()
__ne__()

构造可运算类
实现以下方法:
__add__()
__sub__()
__mul__()
__div__()

猜你喜欢

转载自mutourenoo.iteye.com/blog/2322519