Answer
t.me/python_tesstОтвет:
greetings from <class '__main__.TryHello'>, a HelloMeta type class
Объяснение:
Метакласс – это пример самого класса, как класс есть пример для его экземпляров. Метакласс – это класс, который определяет свойства других классов. С помощью метакласса мы можем определять свойства, которые следует добавить к новым классам, определяемымв нашем коде. Прочтите комментарии, чтобы лучше понимать, что мы сделали в каждой части кода. Метаклассы дают нам возможность писать код, который изменяет не только данные, но и другой код, то есть изменяет класс во время его создания. В примере выше наш метакласс автоматически добавляет новый метод к новым классам, которые мы определяем, чтобы использовать метакласс.
Код:
# hello_metaclass.py # Простой метакласс # Этот метакласс добавляет метод 'hello' к классам, использующим его значение, # те классы получают метод 'hello' без лишних усилий # метакласс заботится о генерации кода для нас class HelloMeta(type): # Метод hello def hello(cls): print("greetings from %s, a HelloMeta type class" % (type(cls()))) # Вызываем метакласс def __call__(self, *args, **kwargs): # создаём новый класс как обычно cls = type.__call__(self, *args) # определяем новый метод hello для каждого из этих классов setattr(cls, "hello", self.hello) # возвращаем класс return cls # Проверяем метакласс class TryHello(object, metaclass=HelloMeta): def greet(self): self.hello() # Создаём экземпляр метакласса. Он должен автоматически содержать метод hello # хотя он не объявлен в классе вручную # иными словами, он объявлен за нас метаклассом greeter = TryHello() greeter.greet()