python - 在设计 python 类时,使用 getters/setters 和属性的良好风格是什么

标签 python mongodb orm pymongo

我遇到了这个 python 代码库,其中有一个映射到 MongoDb 的自定义 ORM 代码。我被要求按照现有的代码模式编写新的实体。我写Python代码才一周时间。但是,我发现这种将 getter 样式方法名称标记为属性等的组合令人困惑。我知道我在这里没有提供太多背景信息。但是,我想从一个好的 Python 编程 api 视角来讨论这个 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)
  ...

最佳答案

看起来不太好。没有理由在 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

关于python - 在设计 python 类时,使用 getters/setters 和属性的良好风格是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16405006/

相关文章:

python - Python 中的 While 循环失败

node.js - 在 where 上使用 Sequelize 函数

java - 如果模型包含另一个列表模型,如何设计数据库 SQLITE

mongodb - 如何在独立的 MongoDB 中查看 oplog

python - 如何将元素推送到 MongoDB 中的现有数组?

mysql - 在 CakePHP ORM 中使用计数子查询

python - 在 python 上子类化列表

python - xDjango 使用查询集内连接表

python - 使用 ElementTree 在 Python 中解析嵌套 XML 数据

c# - 在同一节点上构建过滤器