| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 | '''Моносостояние - паттерн, который позволяет получить экземплярыклсса с одним общим набором атрибутов'''class SimpleCat:    def __init__(self, breed, color):        self.breed = breed        self.color = colordef 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()
 |