面向对象的进阶 item
#incoding=utf-8
'''item 字典方式访问对象属性
__getitem__
__setitem__
__delitem__
__new__ 构造方法,在init方法之前执行
__eq__
__hash__
'''
class Foo:
def __init__(self,name,age,hobby):
self.name = name
self.age = age
self.hobby = hobby
def __getitem__(self, item):
if hasattr(self,item):
return self.__dict__[item]
def __setitem__(self, key, value):
self.__dict__[key] = value
def __delitem__(self, key):
del self.__dict__[key]
def __new__(cls, *args, **kwargs): # 构造方法
print('构造方法')
return object.__new__(cls)
def __eq__(self, other): #
if self.name == other.name:
return True
else:
return False
def __hash__(self):
return hash(self.name+self.age)
f = Foo('lao',12,'run')
print(f['name']) # lao
f['hobby'] = 'fight'
print(f['hobby']) # fight
print(f.__dict__)
f1 = Foo('lao',12,'run')
print(f == f1) # ==默认比较的是内存地址,要是重写了__eq__方法,则用重写的方法