关于mongodb:在设计python类时,使用getter / setter,属性的好方法是什么

What is a good style around the use of getters/setters , properties while designing python classes

我遇到了这个python代码库,其中有一个映射到mongodb的自定义ORM代码。我被要求按照现有的代码模式编写新的实体。我只写了一个星期的python代码。但是,我发现这种getter风格的方法名的混合被标记为属性等,这让人困惑。我知道在这里我没有给出太多的上下文。但是,我想讨论一下这个API是如何从一个优秀的Python编程api pov中获得的。

它的python 2.7。

1
2
3
4
5
6
7
8
9
10
11
12
13
class Entity(object):
    def save(self):
    ...

class Person(Entity):
  ...
  @property
  def get_config(self):
    return getattr(self, 'config', None)

  def set_config(self, config):
    self.set('config', config)
  ...


看起来不太好。在Python中,没有理由仅仅使用getter/setter来获取和设置静态值。看看这个问题。只有在实际需要以编程方式计算每个访问的属性值时,才应该使用它们。

此外,如果属性未定义,则不使用getattr返回none,而应将其初始化为none。然后您可以无条件地读取它的值。

所以:

1
2
3
4
class Person(Entity):
    def __init__(self):
        # initialize config to None
        self.config = None

稍后,如果其他代码需要读取名为someperson的个人实例的config属性,只需执行以下操作:

1
somePerson.config

如果需要设置,只需执行以下操作:

1
somePerson.config = newConfig