"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 agregar atributos y métodos personalizados a los tipos integrados de Python?

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

Publicado el 2024-11-20
Navegar:834

How can I add custom attributes and methods to built-in Python types?

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!"
Ú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