"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 > Como posso estender os tipos integrados do Python com métodos e atributos personalizados?

Como posso estender os tipos integrados do Python com métodos e atributos personalizados?

Publicado em 2024-11-10
Navegar:347

How can I extend built-in Python types with custom methods and attributes?

Extensão de tipos Python integrados com métodos e atributos personalizados

Em Python, você pode encontrar cenários em que deseja estender em tipos com métodos ou atributos adicionais. No entanto, alterar diretamente esses tipos não é permitido.

Por exemplo, se você tentar adicionar um método helloWorld() ao tipo dict conforme demonstrado em JavaScript, descobrirá que tal abordagem não é suportada.

Solução alternativa usando subclasses e substituição de namespace

Embora você não possa aumentar diretamente o tipo original, existe uma solução alternativa inteligente. Ao criar uma subclasse do tipo de destino e, posteriormente, substituí-lo no namespace integrado/global, você pode imitar efetivamente o comportamento desejado.

Aqui está uma implementação em Python:

# Built-in namespace
import __builtin__

# Extended subclass
class mystr(str):
    def first_last(self):
        if self:
            return self[0]   self[-1]
        else:
            return ''

# Substitute the original str with the subclass on the built-in namespace    
__builtin__.str = mystr

print(str(1234).first_last())  # 14
print(str(0).first_last())  # 00
print(str('').first_last())  # ''

# Note that objects created by literal syntax will not have the extended methods
print('0'.first_last())  # AttributeError: 'str' object has no attribute 'first_last'

Neste exemplo, a subclasse mystr estende o tipo str adicionando um método first_last(). A atribuição __builtin__.str redireciona todas as chamadas str integradas para usar a subclasse modificada. Como resultado, os objetos instanciados com o construtor str() integrado agora possuem o método first_last().

No entanto, é crucial observar que os objetos criados usando sintaxe literal ('string') permanecerão instâncias de o tipo str não modificado e não herdará os métodos personalizados.

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