"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo puedo ampliar los tipos integrados de Python con métodos y atributos personalizados?

¿Cómo puedo ampliar los tipos integrados de Python con métodos y atributos personalizados?

Publicado el 2024-11-10
Navegar:126

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

Extensión de los tipos integrados de Python con métodos y atributos personalizados

En Python, puede encontrar escenarios en los que desee ampliar los tipos integrados de Python. en tipos con métodos o atributos adicionales. Sin embargo, no se permite alterar directamente estos tipos.

Por ejemplo, si intenta agregar un método helloWorld() al tipo dict como se muestra en JavaScript, encontrará que dicho enfoque no es compatible.

Solución alternativa mediante subclases y sustitución de espacios de nombres

Si bien no se puede aumentar directamente el tipo original, existe una solución alternativa inteligente. Al subclasificar el tipo de destino y posteriormente sustituirlo dentro del espacio de nombres integrado/global, puede imitar eficazmente el comportamiento deseado.

Aquí hay una implementación en 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'

En este ejemplo, la subclase mystr extiende el tipo str agregando un método first_last(). La asignación __builtin__.str redirige todas las llamadas str integradas para usar la subclase modificada en su lugar. Como resultado, los objetos creados con el constructor str() incorporado ahora poseen el método first_last().

Sin embargo, es crucial tener en cuenta que los objetos creados usando sintaxis literal ("cadena") seguirán siendo instancias de el tipo str no modificado y no heredará los métodos personalizados.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3