我在一个关于Python中的单态设计模式的教程中看到了这段代码:
class BookShelf:
_shared_state = {}
def __init__(self, number_of_books):
self.number_of_books = number_of_books
def __new__(cls, *args, **kwargs):
object_ = super().__new__(cls)
object_.__dict__ = cls._shared_state
return object_
当我测试这段代码时,它的工作原理是类地址不同,而number_of_books
在它们之间共享。我不明白number_of_books
是如何传递给_shared_state
的。我从代码中了解到,_shared_state
被传递给新对象的__dict__
属性。那么,当__dict__
从未传递给_shared_state
时,实例之间的状态实际上是如何共享的呢?!
_shared_state
是一个类变量,由类的所有实例共享__new__
方法负责创建类的实例,因此可以使用此方法自定义对象创建__dict__
是用于存储对象(可写(属性的字典或其他映射对象。或者换句话说,__dict__
是包含类的名称空间的字典- 对于所有创建的对象,
__dict__
都被相同的字典对象_shared_state
覆盖,因此它们都将共享并使用相同的__dict__
对象