Escolar Documentos
Profissional Documentos
Cultura Documentos
@property
def x(self):
return self.__x
@x.setter
def x(self, value):
self.__x = value
def __init__(self):
self.__dict__ = self.__shared_state
@property
def x(self):
return self.__x
@x.setter
def x(self, value):
self.__x = value
@staticmethod
def instance():
if not Singleton.__instance:
Singleton.__instance = Singleton()
return Singleton.__instance
Em termos de uso, como mencionei no comeo do post, no temos muitas diferenas, veja um
exemplo:
s1 = Singleton.instance()
s2 = Singleton.instance()
s1.x = 10
b1 = Borg()
b2 = Borg()
b1.x = 20
print('Singleton')
print('s1.x={} | s2.x={}'.format(s1.x, s2.x))
print('id(s1)={} | id(s2)={}'.format(id(s1), id(s2)))
print('-------------------')
print('Borg')
print('b1.x={} | b2.x={}'.format(b1.x, b2.x))
print('id(b1)={} | id(b2)={}'.format(id(b1), id(b2)))
Veja que nos objetos Borg, o id retornado diferente, o que significa que estamos lidando com
instancias distintas, porm, o valor do atributo X o mesmo para as duas instancias.
Uma vantagem do Borg que o seu funcionamento se estende para as suas subclasses, porm, as
vezes o que realmente queremos somente uma instancia de uma determinada classe.
Independente de qual o melhor, conhecer os dois e estar pronto para us-los ou interpret-los no
momento certo com certeza a melhor opo.