Extensión de tipos integrados de Python con atributos y métodos personalizados
En Python, extensión de tipos integrados como diccionarios con métodos o atributos personalizados Puede parecer una solicitud sencilla. Sin embargo, el diseño de Python no admite de forma nativa tales modificaciones. A diferencia del mecanismo de herencia prototipo de JavaScript, los tipos integrados de Python son estáticos e inmutables.
Enfoque alternativo: subclasificación de clases
Aunque no es posible agregar métodos directamente a los tipos integrados Si es posible, puede lograr un efecto similar subclasificando el tipo y sustituyéndolo en el espacio de nombres global. Esto le permite agregar atributos y métodos personalizados a instancias de la nueva subclase.
Por ejemplo, supongamos que queremos agregar un método helloWorld() al tipo dict. Podemos crear la siguiente subclase:
class mydict(dict):
def helloWorld(self):
# Custom method implementation
print("Hello world from mydict!")
Para reemplazar el dict integrado con nuestra subclase, podemos usar el módulo __builtin__:
import __builtin__
__builtin__.dict = mydict
Uso y limitaciones
Ahora, cualquier diccionario futuro creado usando el constructor dict será instancia de mydict y tendrá el método helloWorld():
d = dict()
d.helloWorld() # Outputs "Hello world from mydict!"
Sin embargo, es importante tener en cuenta que los objetos creados usando sintaxis literal seguirán siendo instancias del tipo dict original y no tendrán sus métodos o atributos personalizados :
d = {}
d.helloWorld() # Raises AttributeError
Esto se debe a que la sintaxis literal omite el proceso de construcción de objetos y crea directamente instancias de tipos integrados. Para superar esta limitación, puede definir una función que convierta objetos integrados en sus instancias de subclase:
def my_dict(d):
return mydict(d)
Luego, use la función en lugar de la sintaxis literal para crear diccionarios:
d = my_dict({})
d.helloWorld() # Outputs "Hello world from mydict!"
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