假设我有:
class myclass:
def __init__(self):
self.foo = "bar"
其中foo的值需要为myclass的用户所用。是否可以直接从myclass实例中读取foo的值?我应该向myclass添加get_foo方法还是添加foo属性?这里最好的做法是什么?
答案 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'
>>>