views:

86

answers:

2
+1  Q: 

Python property

The output seems a bit fishy given the following code. Why is "get in Base" only printed once? And why is not "set in Base" printed at all? The actual getting/setting seems to work fine though. What am I missing?

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

Output:

get in Base
BaseStr
Foo
+7  A: 

You need to use new-style classes for properties to work correctly. To do so derive your class from object:

class Base(object):
    ...
sth
Spot on, thank you. :)
mizipzor
+1  A: 

Whenever creating a new class, derive it from the object type.

Jolly