【发布时间】:2020-04-17 11:09:05
【问题描述】:
python 如何将属性 val1 和 val2 添加到类中。 python 是否在内部调用 b1.__shared_state['val1'] = 'Jaga Gola!!!' 之类的东西?
# Borg (monostate pattern) lets a class have as many instances as one likes,
# but ensures that they all share the same state
class Borg:
__shared_state = {}
def __init__(self):
self.__dict__ = self.__shared_state
b1 = Borg()
b2 = Borg()
print(b1 == b2)
b1.val1 = 'Jaga Gola!!!'
b1.val2 = 'BOOOM!!!'
print(b2.val1, b1.val2)
为什么如果我删除 _shared_state and self.__dict__ = self.__shared_state 我不能向类添加属性并得到错误:AttributeError: 'Borg' object has no attribute 'val1'?
class Borg:
def __init__(self):
pass
b1 = Borg()
b2 = Borg()
print(b1 == b2)
b1.val1 = 'Jaga Gola!!!'
b1.val2 = 'BOOOM!!!'
print(b2.val1, b1.val2)
【问题讨论】:
-
第二个问题:因为没有明确的共享状态,
b1和b2不共享状态,所以b2.val1不存在。 -
“python 是否在内部调用
b1.__shared_state['val1'] = 'Jaga Gola!!!'之类的东西?” - 是的。实例属性存储在__dict__。 -
好吧,我没有看到,我使用 b2.val1 而不是 b1.val1。我检查了一下,它适用于此更改。
标签: python