【发布时间】:2011-03-20 11:45:00
【问题描述】:
我目前使用 Python 已经有一段时间了,我开始质疑自己是否应该像在 C# 中一样经常在 Python 中使用“属性”。 在 C# 中,我主要为我的大多数类创建属性。
似乎属性在python中并不那么流行,我错了吗? 如何在 Python 中使用属性?
问候,
【问题讨论】:
标签: c# python properties
我目前使用 Python 已经有一段时间了,我开始质疑自己是否应该像在 C# 中一样经常在 Python 中使用“属性”。 在 C# 中,我主要为我的大多数类创建属性。
似乎属性在python中并不那么流行,我错了吗? 如何在 Python 中使用属性?
问候,
【问题讨论】:
标签: c# python properties
如果您所做的只是设置和查询成员变量,则通常不需要属性。因为 Python 没有封装的概念,所以所有的成员变量都是公共的,通常不需要封装访问。但是,属性是可能的、完全合法且受欢迎的:
class C(object):
def __init__(self):
self._x = 0
@property
def x(self):
return self._x
@x.setter
def x(self, value):
if value <= 0:
raise ValueError("Value must be positive")
self._x = value
o = C()
print o.x
o.x = 5
print o.x
o.x = -2
【讨论】:
我建议你阅读这篇文章,即使它是针对 Java 程序员的: Python Is Not Java
【讨论】:
如果您在 C# 中公开了一个属性,那么以后需要将其更改为一个属性,您还需要重新编译所有使用原始类的代码。这很糟糕,所以从第一天起就将任何公共属性都设置为属性以“以防万一”。
如果您有一个从其他代码中使用的属性,那么以后需要将其更改为属性,那么您只需更改它,不需要发生任何其他事情。所以使用普通属性,直到你发现你需要更复杂的东西。
【讨论】: