【发布时间】:2012-06-15 15:18:06
【问题描述】:
在 Java 中,当我有简单的模型/pojo 时,我会使用 getter/setter。我发现当你这样做时,代码变成了自我记录。调用 getName() 将返回一个名称,我不需要关心它是如何映射到某个数据库的等等。
当使用 getter 和 setter 开始感觉笨拙的语言时,问题就会出现,比如在 Python 中,我经常听到人们说它们很糟糕。例如,有一次我有一个 PHP 项目,其中一些数据只是从数据库中查询出来的,并且列值映射到对象/字典。我发现像这样的代码很难阅读,你不能真的只是阅读代码,你阅读了代码,然后你注意到值是从数据库中获取的,现在你必须查看数据库架构一直理解它。当您所能做的只是查看类定义并知道那里不会有任何未记录的魔术键时。
所以我的问题是你们如何在没有 getter 和 setter 的情况下记录代码?
【问题讨论】:
-
你好像把事情搞混了。如果不需要,建议不要在 Python 中使用 getter 和 setter,这意味着您不应该在 getter 和 setter 中包装普通实例属性——这在 Python 中不是必需的,因为如果您决定更改实例布局。
-
所以你是说
getName()是自记录的,但包含名称的instance.name不是? -
当你看到它时确定,但如果你没有看到类定义中的值?仅通过查看代码,您是否可以假设它始终存在,而不是刚刚为程序的这一部分添加的一些魔术键/属性?
-
如果代码动态地向类添加新属性并且这些属性是该类接口的一部分,那就是糟糕的编程。
-
@Guu Python 命名约定是用前下划线命名任何纯粹的实现细节。例如:
something._weight.
标签: java php python setter getter