How to define properties in __init__

前端 未结 3 1044

I whish to define properties in a class from a member function. Below is some test code showing how I would like this to work. However I don\'t get the expected behaviour.

3条回答
  •  情歌与酒
    2021-01-05 20:57

    You need to set the properties on the class (ie: self.__class__), not on the object (ie: self). For example:

    class Basket(object):
    
      def __init__(self):
        # add all the properties
        setattr(self.__class__, 'Apple', property(lambda s : 'Apple') )
        setattr(self.__class__, 'Pear', property(lambda s : 'Pear') )
    
      # normal property
      Air = property(lambda s : "Air")
    
    if __name__ == "__main__":
      b = Basket()
      print b.Air # outputs: "Air"
      print b.Apple # outputs: "Apple"
      print b.Pear # outputs: "Pear"
    

    For what it's worth, your usage of p when creating lamdas in the loop, doesn't give the behavior that you would expect. Since the value of p is changed while going through the loop, the two properties set in the loop both return the same value: the last value of p.

提交回复
热议问题