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

时间:2013-05-06 18:37:47

标签: python mongodb orm pymongo

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

它的python 2.7。

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)
  ...

1 个答案:

答案 0 :(得分:3)

它看起来不那么好。没有理由在Python中使用getter / setter来获取和设置静态值。见this question。如果您确实需要以编程方式计算每次访问的属性值,则只应使用它们。

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

所以:

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

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

somePerson.config

如果您需要进行设置,请执行以下操作:

somePerson.config = newConfig