2011-03-24 9 views
5

Me gustaría poder agregar una propiedad http://docs.python.org/library/functions.html#property a un objeto (una instancia específica de una clase). es posible?Perforación de patos en una propiedad en python

Algunas otras preguntas acerca de pato perforación/mono parches en Python:

Adding a Method to an Existing Object Instance

Python: changing methods and attributes at runtime

ACTUALIZACIÓN: Answer delnan en los comentarios

Dynamically adding @property in python

+2

@Conley: Usted tiene algunos enlaces allí, ¿por qué ninguno de ellos podría resolver su problema? ¿Puedes explicar qué es diferente en tu escenario? –

+0

@Conley: aceptando @ Space_C0wb0y, el segundo enlace parece tener las respuestas que necesita – juanchopanza

+2

Para ser justos, agregar una propiedad requiere más que agregar un método o atributo; el enfoque para este último no funciona, y no puede ' t ser una función auxiliar como en el caso de este último. Sin embargo, esto ya se preguntó y se resolvió en [Adición dinámica @property en python] (http://stackoverflow.com/questions/2954331/dynamically-adding-property-in-python). – delnan

Respuesta

3

siguientes obras de códigos :

#!/usr/bin/python 

class C(object): 
    def __init__(self): 
     self._x = None 

    def getx(self): 
     print "getting" 
     return self._x 
    def setx(self, value): 
     print "setting" 
     self._x = value 
    def delx(self): 
     del self._x 
    x = property(getx, setx, delx, "I'm the 'x' property.") 

s = C() 

s.x = "test" 
C.y = property(C.getx, C.setx, C.delx, "Y property") 
print s.y 

Pero no estoy seguro de que deba hacerlo.

+0

-1: Esto agrega una propiedad a la clase, no solo un objeto. –

+0

@ Space_C0wb0y: Culpable como acusado. –

0
class A: 
    def __init__(self): 
     self.a=10 

a=A() 
print a.__dict__ 
b=A() 
setattr(b,"new_a",100) 
print b.__dict__ 

Espero que esto resuelva su problema.

a.__dict__ #{'a': 10} 
b.__dict__ #{'a': 10, 'new_a': 100} 
Cuestiones relacionadas