Python:类属性与Getter和Setter?

Python: Class Attributes Vs Getters and Setters?

本问题已经有最佳答案,请猛点这里访问。

在处理python类时,似乎有很多次可以使用getMyAttr()setMyAtt()方法获得相同的功能,而不是声明类属性/变量,如self.myVariable

我使用OOP的次数越多,就越倾向于使用类方法来获取和设置属性。我想知道我所选择的方向是否正确,以及我以后是否不会对10公里的代码行感到抱歉。请给出建议!


您的想法是正确的,但是您应该看看python properties来做您正在做的事情:

1
2
3
4
5
6
7
8
9
10
11
12
 class Foo():
   def __init__(self, x):
     self.__x = x

   @property
   def x(self):
     return self.__x

   @x.setter
   def set_x(self, value):
     if(value < 0):
       self.__x = value

其中,您可以嵌套"set"逻辑和"get"逻辑(如果您正在更改如何呈现它),这使得从类中调用值x感觉就像访问属性一样。

1
2
3
4
5
6
7
8
9
   foo = Foo(-4)
   foo.x
   >>> -4
   foo.x = 3
   foo.x
   >>> -4
   foo.x = -12
   foo.x
   >>> -12