__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属性被删除了
posted @ 2019-11-06 11:19  道霖  阅读(133)  评论(0)    收藏  举报