"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Python Metaclass Working Princípio e Criação e Personalização de Classe

Python Metaclass Working Princípio e Criação e Personalização de Classe

Postado em 2025-04-19
Navegar:587

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

O que são metaclasses em python?

metaclasses são responsáveis ​​por criar objetos de classe em python. Assim como as aulas criam instâncias, as metaclasses criam classes. Eles fornecem uma camada de controle sobre o processo de criação de classe, permitindo a personalização do comportamento e dos atributos da classe. Isso significa que as próprias classes são instâncias criadas a partir de uma 'descrição' da classe usando a palavra -chave da classe. Assim, a seguinte declaração cria um objeto de classe chamado ObjectCreator:

classe ObjectCreator (object): PASS

Criando classes dinamicamente

class ObjectCreator(object):
    pass

metaclasses (a classe de classes)

agora, chegamos a metaclasses. Eles são o 'material' que cria esses objetos de classe. Assim como as aulas criam instâncias, as metaclasses criam classes. Eles são efetivamente as classes nos bastidores que o Python usa automaticamente para criar classes definidas usando a palavra -chave da classe. No Python 3, isso foi substituído por um argumento de palavra -chave na lista de classes base.

Foo = type('Foo', (), {'bar': True})
print(Foo)  # 
print(Foo.bar)  # True

metaclasses personalizadas em ação

um metaclass pode modificar a classe que cria, permitindo o comportamento dinâmico da classe. Por exemplo, você pode definir uma metaclasse que converte automaticamente todos os atributos de classe em maiúsculas:

classe altaTtrMetaclass (Type): def __new __ (cls, clsname, bases, attrs): uppercase_attrs = { att se attr.startswith ('__') else attr.upper (): v para attr, v em attrs.items () } retornar super () .__ novo __ (cls, clsname, bases, uppercase_attrs) Então, você pode usar esse metaclasse para criar uma classe com atributos upcase:

classe foo (object, metaclass = UpperattrMETACLASS): bar = 'bip' print (foo.bar) # 'bip'

# Python 2
class Foo(object, __metaclass__=MyMetaclass):
    ...

# Python 3
class Foo(object, metaclass=MyMetaclass):
    ...

Embora você normalmente não precise de metaclasses, eles encontram casos de uso na criação de APIs que abstraem a complexidade da alteração de classe atrás de uma interface simples. Por exemplo, o ORM do Django usa metaclasses para permitir que você defina campos de banco de dados usando instruções simples como Charfield e Integerfield. No entanto, é importante observar que eles são complexos e só devem ser usados ​​quando necessário para evitar complicações desnecessárias.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3