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.
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