共享__dict__的属性字典

在Python中,实例属性存储在名为__dict__的属性字典中。通常,每个实例都有自己的字典。

修改它,以便所有实例都具有相同的字典。


class Borg(object):

    __shared_state = {}



    def __init__(self):

        self.__dict__ = self.__shared_state

        self.state = 'Init'    def __str__(self):

        return self.state





class YourBorg(Borg):

    passif __name__ == '__main__':

    rm1 = Borg()

    rm2 = Borg()



    rm1.state = 'Idle'    rm2.state = 'Running'    print('rm1: {0}'.format(rm1))

    print('rm2: {0}'.format(rm2))



    rm2.state = 'Zombie'    print('rm1: {0}'.format(rm1))

    print('rm2: {0}'.format(rm2))



    print('rm1 id: {0}'.format(id(rm1)))

    print('rm2 id: {0}'.format(id(rm2)))



    rm3 = YourBorg()



    print('rm1: {0}'.format(rm1))

    print('rm2: {0}'.format(rm2))

    print('rm3: {0}'.format(rm3))



### OUTPUT ###

# rm1: Running

# rm2: Running

# rm1: Zombie

# rm2: Zombie

# rm1 id: 140732837899224

# rm2 id: 140732837899296

# rm1: Init

# rm2: Init

# rm3: Init


 

 是否会覆盖?

 

展开阅读全文