python类属性的不足
实例化属性之间会互相影响
class C:
x = {}
c = C()
c.x['a'] = 1
print(c.x) # {'a': 1}
print(C.x) # {'a': 1}
cc = C()
cc.x['b'] = 2
print(cc.x) # {'a': 1, 'b': 2}
print(c.x) # {'a': 1, 'b': 2}
print(C.x) # {'a': 1, 'b': 2}
这一点从werkzeug库的Local对象,不将__storage__
这个会在不同线程中使用的属性,设置为类属性可以看出
class Local(object):
__slots__ = ("__storage__", "__ident_func__")
def __init__(self):
object.__setattr__(self, "__storage__", {}) # self.__setattr__('storage', {}) # 该种方式会产生递归调用
object.__setattr__(self, "__ident_func__", get_ident)