__call__和item系列



class Foo: def __init__(self, name): self.name = name def __getitem__(self, item): if hasattr(self, item): return self.__dict__[item] def __setitem__(self, key, value): self.__dict__[key] = value f = Foo('wang') f['sex'] = '男' # 实际是调用 __setitem__(),[]里的会传给key,=后的值会传给value print(f['sex']) print(f.sex)

这是一种新方式,但还是感觉之前的方式好点。
class Foo: def __init__(self, name): self.name = name 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] f = Foo('wang') f['sex'] = '男' print(f['sex']) del f['sex'] # 调用__delitem__() print(f.sex) # 报错,因为sex属性被删除了
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号