class nihao:
def __init__(self,name):
self.name = name
def __getattr__(self, item):
print(‘找不到属性来这里‘)
def __getattribute__(self, item): #很少用到
print(‘找不找的到属性都来这里‘)
raise ArithmeticError(‘属性不存在,出现这个错误交给__getattr__函数处理‘)
#这个是类默认的工作原理,虽然找不找的到属性都会执行此函数,但是此函数会判断不存在属性
#时候回报对应错误,__getattr__接收到这个歌错误就会执行函数,如果有属性,就执行正常查询(属性字典)
class hao(nihao):
print(‘dsad‘)
f = nihao(‘jian‘)
print(isinstance(f,nihao)) 判断是否是这个类产生的实例
print(issubclass(hao,nihao)) 判断是否是这个类的子类
class test:
def __getitem__(self,item):
print(‘这个是查找‘)
#print(getattr(self,item)) #使用getattr 来查找
return self.__dict__[item] #使用dict字典查找
def __setitem__(self,key,value):
#setattr(self,key,value) #使用setattr 来修改
self.__dict__[key]=value
def __delitem__(self,key):
#delattr(self,key)
self.__dict__.pop(key)
#使用item方法,可以使对象在调用属性的时候,像字典一样去操作。
# 注意,用字典方法去调用对应item方法的函数,用.的方式去调用对应attr函数
# 方法调用的方式决定触发那种函数
f=test()
f[‘jia‘]=‘ha‘
print(f.__dict__)
f[‘jia‘]
原文:https://www.cnblogs.com/huangjianfir/p/13531708.html