Estendendo tipos integrados do Python com atributos e métodos personalizados
Em Python, estendendo tipos integrados, como dicionários, com métodos ou atributos personalizados pode parecer um pedido simples. No entanto, o design do Python não suporta nativamente tais modificações. Ao contrário do mecanismo de herança de protótipo do JavaScript, os tipos integrados do Python são estáticos e imutáveis. possível, você pode obter um efeito semelhante subclassificando o tipo e substituindo-o no namespace global. Isso permite que você adicione atributos e métodos personalizados às instâncias da nova subclasse.
Por exemplo, suponha que queiramos adicionar um método helloWorld() ao tipo dict. Podemos criar a seguinte subclasse:
class mydict(dict): def oláMundo(self): # Implementação de método personalizado print("Olá, mundo do mydict!")Para substituir o dict integrado por nossa subclasse, podemos usar o módulo __builtin__:class mydict(dict):
def helloWorld(self):
# Custom method implementation
print("Hello world from mydict!")
Uso e limitações
import __builtin__
__builtin__.dict = mydict
d = dict() d.helloWorld() # Saídas "Hello world from mydict!"
No entanto, é importante observar que os objetos criados usando sintaxe literal ainda serão instâncias do tipo dict original e não terão seus métodos ou atributos personalizados :d = dict()
d.helloWorld() # Outputs "Hello world from mydict!"
Isso ocorre porque a sintaxe literal ignora o processo de construção do objeto e cria diretamente instâncias de tipos integrados. Para superar essa limitação, você pode definir uma função que converte objetos integrados em suas instâncias de subclasse:d = {}
d.helloWorld() # Raises AttributeError
Em seguida, use a função em vez da sintaxe literal para criar dicionários:d = my_dict({})
d.helloWorld() # Saídas "Olá mundo do mydict!"
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