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__()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值