class - Python properties: why doesn't this code run the function? -
i'm trying use properties , tried alter python documentation's code. i'd expect next print anything, doesn't. why not print anything?
class user: def getter(self, name): def get_prop(self): print 'getting {}'.format(name) homecoming getattr(self, name) homecoming get_prop def setter(self, name): def set_prop(self, value): print 'setting {} {}'.format(name, value) homecoming setattr(self, name, value) homecoming set_prop user_id = property(getter, setter) u = user() u.user_id = 10 u.user_id
there 2 reasons property doesn't work:
you need utilize new style class (by basing class on object); cannot utilize property setter otherwise (only getter supported old-style classes).
you generating accessors nested functions; need phone call outer methods generate accessors, property() function no you. such, can move functions out of class , utilize them plain functions instead.
the next code works:
def getter(name): def get_prop(self): print 'getting {}'.format(name) homecoming getattr(self, name) homecoming get_prop def setter(name): def set_prop(self, value): print 'setting {} {}'.format(name, value) homecoming setattr(self, name, value) homecoming set_prop class user(object): user_id = property(getter('_user_id'), setter('_user_id')) note used _user_id property 'name' here, otherwise getattr(self, name) phone call trigger infinite recursion; u.user_id trigger getattr(u, 'user_id') triggers property again.
python class properties
No comments:
Post a Comment