Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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
like image 971
Mizipzor Avatar asked Jan 23 '10 23:01

Mizipzor


1 Answers

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

class Base(object):
    ...
like image 194
sth Avatar answered Nov 08 '22 01:11

sth