''' Моносостояние - паттерн, который позволяет получить экземпляры клсса с одним общим набором атрибутов ''' class SimpleCat: def __init__(self, breed, color): self.breed = breed self.color = color def test_1(): cat1 = SimpleCat('pers', 'black') cat2 = SimpleCat('siam', 'gray') print(cat1.__dict__) # {'breed': 'pers', 'color': 'black'} print(cat2.__dict__) # {'breed': 'siam', 'color': 'gray'} print(id(cat1.__dict__), id(cat2.__dict__)) # разные ссылки на атрибут __dict__ class Cat: __shared_attr = { # Формирование единого словаря атрибутов класса 'breed': 'pers', # При изменении значений - эти значения обновятся 'color': 'black' # во всех экземплярах класса } def __init__(self): self.__dict__ = Cat.__shared_attr # Подменяем в инициализации __dict__ # ссылкой на созданный моно-словарь def test_2(): cat1 = Cat() cat2 = Cat() print(cat1.__dict__) # {'breed': 'pers', 'color': 'black'} print(cat2.__dict__) # {'breed': 'pers', 'color': 'black'} print(id(cat1.__dict__), id(cat2.__dict__)) # одинаковые ссылки cat1.breed, cat1.color = 'pers', 'white' # Меняем атрибуты у cat1 print('cat1:', cat1.__dict__) # {'breed': 'pers', 'color': 'white'} print('cat2:', cat2.__dict__) # {'breed': 'pers', 'color': 'white'} cat2.breed, cat2.color = 'siam', 'gray' # Меняем атрибуты у cat2 print('cat1:', cat1.__dict__) # {'breed': 'siam', 'color': 'gray'} print('cat2:', cat2.__dict__) # {'breed': 'siam', 'color': 'gray'} ''' Атрибут weight появится во всех экземплярах класса Cat ''' def test_3(): cat1 = Cat() cat2 = Cat() cat1.weight = 5 # Добавляем параметр в ЭК print('cat1:', cat1.__dict__) # {'breed': 'pers', 'color': 'black', 'weight': 5} print('cat2:', cat2.__dict__) # {'breed': 'pers', 'color': 'black', 'weight': 5} def main(): # test_2() test_3() if __name__ == '__main__': main()