123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- '''
- Моносостояние - паттерн, который позволяет получить экземпляры
- клсса с одним общим набором атрибутов
- '''
- 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()
|