«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Python Metaclass Principle и создание и настройку класса

Python Metaclass Principle и создание и настройку класса

Опубликовано в 2025-04-16
Просматривать:231

How Do Metaclasses Work in Python to Create and Customize Classes?

Что такое Metaclass в Python? Так же, как классы создают экземпляры, MetaClasses создают классы. Они обеспечивают уровень контроля над процессом создания класса, позволяя настраивать поведение и атрибуты класса. Это означает, что сами классы - это случаи, созданные из «описания» класса, используя ключевое слово класса. Таким образом, следующее утверждение создает объект класса с именем objectCreator:

class objectCreator (Object): PASS

Создание классов динамически

. Поскольку классы являются объектами, вы можете создавать их динамически, даже во время выполнения. Функция типа позволяет вам определить класс, предоставляя его имя, базы и атрибуты в качестве аргументов. Он возвращает недавно созданный объект класса.

class ObjectCreator(object):
    pass

metaClasses (класс классов)

теперь мы приходим к MetaClasses. Это «вещи», который создает эти классовые объекты. Так же, как классы создают экземпляры, MetaClasses создают классы. Это фактически классы за кадром, которые Python автоматически использует для создания классов, определяемых с использованием ключевого слова класса.

Foo = type('Foo', (), {'bar': True})
print(Foo)  # 
print(Foo.bar)  # True
атрибут

В Python 2 вы можете указать атрибут __metaclass__ при определении класса для использования пользовательского MetaClass для создания этого класса. В Python 3 это было заменено аргументом ключевого слова в списке базовых классов.

# Python 2 класс foo (Object, __metaClass __ = myMetaClass): ... # Python 3 Класс Foo (Object, MetaClass = MyMetAclass): ...

Custom Metaclass в Action

Metaclass может изменить класс, который он создает, позволяя динамическое поведение класса. Например, вы можете определить MetaClass, который автоматически преобразует все атрибуты класса в верхний регистр:

класс UpperAttrmetAclass (type): def __new __ (cls, clsname, bases, attrs): uppercase_attrs = { attr if attr.startswith ('__') else attr.upper (): v для attr, v in attrs.items () } вернуть Super () .__ Новый __ (CLS, ClSname, Bases, uppercase_attrs)
# Python 2
class Foo(object, __metaclass__=MyMetaclass):
    ...

# Python 3
class Foo(object, metaclass=MyMetaclass):
    ...
. Затем вы можете использовать этот MetaClass для создания класса с атрибутами верхней передачи:

class foo (Object, metaclass = upperattrmetAclass): bar = 'bip' print (foo.bar) # 'bip'

Зачем использовать Metaclass? Например, ORM Django использует MetaClasses, чтобы позволить вам определять поля базы данных, используя простые операторы, такие как Charfield и Integerfield.
Foo = type('Foo', (), {'bar': True})
print(Foo)  # 
print(Foo.bar)  # True
Заключение

]

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3