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

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -