Python:我应该如何使实例变量可用?

时间:2010-06-03 08:10:24

标签: python class-design

假设我有:

class myclass:
  def __init__(self):
    self.foo = "bar"

其中foo的值需要为myclass的用户所用。是否可以直接从myclass实例中读取foo的值?我应该向myclass添加get_foo方法还是添加foo属性?这里最好的做法是什么?

5 个答案:

答案 0 :(得分:8)

适用的Python格言是“我们都是成年人” - 如果用户需要直接访问foo的值,请让他们直接访问它。如果你需要在访问时运行一些代码,那么getter或属性就有意义,否则直接的方式是最好的。

此外,如果需要,您可以随时将其透明地转换为属性。

答案 1 :(得分:1)

我认为将“foo”暴露出来应该没问题。即使你将它隐藏在“getter”后面,坚持不懈的用户仍然可以访问它。正如tzaman所说“我们都是成年人”。

如果您希望稍微限制使用(即设置更难),您可以考虑使用属性进行曝光。如果需要公开基于其他属性派生的属性,则属性特别方便。

答案 2 :(得分:1)

Python教程有一个非常简洁的讨论,所以请查看它。由于Python中没有访问控制,并且推荐是:如果有一些东西你会在C ++中使用私有,那么在Python中使用_启动名称并“玩得很好”。否则只需直接访问它。

答案 3 :(得分:1)

我的建议,最简单!直接访问实例变量。

您可以争辩说,如果您更改数据的内部表示,您希望以相同的方式访问数据,而无需关心内部表示。但是嘿!如果你有get_foo和set_foo,那么语义就意味着你正在改变一个变量。所以这样做:)

PS:我喜欢那里的红宝石方法:)

答案 4 :(得分:1)

取决于“myclass用户可用”的含义。我认为你在谈论一个类属性,如下所示:

>>> class Myclass(object):
...     foo = "bar"
...
>>> a = Myclass()
>>> a.foo
'bar'
>>> b = Myclass()
>>> b.foo
'bar'
>>> Myclass.foo = "zot"
>>> a.foo
'zot'
>>> b.foo
'zot'
>>>