class objectCreator (Object): PASS
. Поскольку классы являются объектами, вы можете создавать их динамически, даже во время выполнения. Функция типа позволяет вам определить класс, предоставляя его имя, базы и атрибуты в качестве аргументов. Он возвращает недавно созданный объект класса.
class ObjectCreator(object): pass
теперь мы приходим к MetaClasses. Это «вещи», который создает эти классовые объекты. Так же, как классы создают экземпляры, MetaClasses создают классы. Это фактически классы за кадром, которые Python автоматически использует для создания классов, определяемых с использованием ключевого слова класса.
Foo = type('Foo', (), {'bar': True}) print(Foo) #атрибутprint(Foo.bar) # True
# Python 2 класс foo (Object, __metaClass __ = myMetaClass): ... # Python 3 Класс Foo (Object, MetaClass = MyMetAclass): ...
класс 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 для создания класса с атрибутами верхней передачи:
Зачем использовать Metaclass? Например, ORM Django использует MetaClasses, чтобы позволить вам определять поля базы данных, используя простые операторы, такие как Charfield и Integerfield.
Foo = type('Foo', (), {'bar': True}) print(Foo) #Заключениеprint(Foo.bar) # True
]
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3