Why do we need property in Python? -
i understand 1 of main purpose use property validation , formatting. example, have user class shown below. , want firstname , lastname capitalized when being set. why need property if can write following code achieve same formatting result?
class user: def __init__(self, firstname, lastname): self.firstname = firstname self.lastname = lastname def __setattr__(self, attr, value): if attr == 'firstname': self.__dict__[attr] = value.capitalize() elif attr == 'lastname': self.__dict__[attr] = value.capitalize()
you're right, don't need properties perform validation on setting attribute, or perform special behavior when doing attribute lookup. properties more readable , nicer write. i'd stick using __getattr__
, __setattr__
in cases want dynamically access attributes (that is, don't know attributes you'll have @ time of class definition). otherwise, use properties, recognizable python idiom.
in fact, in case have 2 properties performing same validation, might use descriptor:
class namedescriptor(object): def __init__(self, key): self.key = key def __get__(self, obj, objtype): return getattr(obj, self.key) def __set__(self, obj, val): setattr(obj, self.key, val.capitalize()) class user(object): firstname = namedescriptor('_firstname') lastname = namedescriptor('_lastname') def __init__(self, first, last): self.firstname = first self.lastname = last
a demo of how works:
>>> user = user('steve', 'martin') >>> user.firstname 'steve' >>> user.firstname = 'dean' >>> user.firstname 'dean'
Comments
Post a Comment