1

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

它的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)
  ...
4

1 回答 1

3

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

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

所以:

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

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

somePerson.config

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

somePerson.config = newConfig
于 2013-05-06T18:41:10.333 回答