# coding:utf-8if __name__ =='__main__':'''
定义:def __init__(self,参数1,参数2......):
......
使用:在类实例化时触发 类名(参数1,参数2.......)
'''classA(object):def__init__(self, name, sex):print(f'name is {name}, sex is {sex}')
a = A('xie','man')# name is xie, sex is man
__getattr__
# coding:utf-8if __name__ =='__main__':'''
定义: def __getattr(self,属性名)
使用:在访问类不存在的或无权限的属性时触发 object.属性名
'''classB(object):
__name ='rui'
name ='xie'def__getattr__(self, name):returnf'name is {name}'
b = B()print(b.name)# xieprint(b.__name)# name is __nameprint(b.sex)# name is sexprint(b._B__name)# rui
__setattr__
# coding:utf-8if __name__ =='__main__':'''
定义: def __setattr__(self,属性名,属性值)
使用: 给类设置属性值时触发 object.属性名 = 属性值
'''classC(object):
name =''
__name =''
__sex =''def__setattr__(self, key, value):print(f'I want set key:{key},value:{value}')
c = C()
c.name ='xie'# I want set key:name,value:xie
c.age ='6666'# I want set key:age,value:6666
c.__sex ='man'# I want set key:__sex,value:man
__call__
# coding:utf-8if __name__ =='__main__':'''
定义: def __call__(self,参数1,参数2......)
使用: 把类实例当做函数调用,通过object(参数1,参数2......)触发
'''classD(object):def__call__(self,*args,**kwargs):print(f'args is {args},kwargs is {kwargs}')
d = D()
d(*(1,2,3),**{'name':'xie'})# args is (1, 2, 3),kwargs is {'name': 'xie'}