Answer

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


Report Page