2010-01-23 17 views
8

La salida parece un poco sospechosa dado el siguiente código. ¿Por qué "get in Base" solo se imprime una vez? ¿Y por qué no se imprime "set in Base"? El verdadero get/setting parece funcionar bien sin embargo. ¿Qué me estoy perdiendo?Propiedad Python

class Base: 
    def __init__(self): 
     self.s = "BaseStr" 

    def getstr(self): 
     print "get in Base" 
     return self.s 
    def setstr(self, s): 
     print "set in Base" 
     self.s = s 
    str = property(getstr, setstr) 

b = Base() 
print b.str 
b.str = "Foo" 
print b.str 

Salida:

get in Base 
BaseStr 
Foo 

Respuesta

18

Es necesario utilizar new-style classes de propiedades para que funcione correctamente. ¿Deriva la clase de object:

class Base(object): 
    ... 
+1

Spot on, gracias. :) – Mizipzor

+0

Y, para Python 3.x, no necesita hacer esto. Todas las clases en Python3 son de estilo nuevo. – treecoder

+1

Pero si no hago una subclase 'object', aún puedo crear' property' en la clase clásica, ¿por qué? – Alcott

1

Siempre que la creación de una nueva clase, que se derivan del tipo object.

Cuestiones relacionadas