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()