class teste(object):
def __init__(self,a):
self.a=a
def getA(self):
return self.a
new=teste("lucas")
print new.getA() ######### LINE 1
print new.a ######### LINE 2
为什么在课堂上我们总是需要这种“获取”方法?我的意思是,“LINE 1”和“LINE 2”之间有什么区别?他们输出同样的东西。
答案 0 :(得分:4)
你不是用Python。
请注意,getter和setter通常被视为“un pythonic”(相关:python -c 'import this'
)。
Getters只是一种风格。有时您可能想要使用getter,但它是not always necessary。有关getter和setter的一般性讨论,请参阅why use getters and setters。
要获得与Python的更多相关性,请考虑:
An opinion piece,
another opinion piece,some sample code或some other sample code。
答案 1 :(得分:3)
在python中,你不需要获取方法。这是编码风格的问题。
答案 2 :(得分:1)
其他答案已经说过你从来不需要Python中的getter,这只是风格问题。
但关键在于有一种Pythonic风格,不必要的吸气者违背这种风格。当有经验的Python开发人员阅读代码时,使用不必要的getter会引发危险信号。 (需要多少秒才能得到三条评论,说“有人在这里使用过多的Java”?)
如果您阅读PEP 8样式指南,请在Designing for inheritance下面说明:
对于简单的公共数据属性,最好只公开属性名称,而不使用复杂的访问器/ mutator方法。请记住,如果您发现简单的数据属性需要增加功能行为,那么Python为未来的增强提供了一条简单的途径。在这种情况下,使用属性隐藏简单数据属性访问语法背后的功能实现。
PEP 8仅作为stdlib的样式指南,但它通常被认为是对惯用的Python看起来很好的描述(“TOOWTDI”意味着任何描述性指南都是隐含的说明性指南,至少在理论上是如此),并且有很好的测试人员和修复工具可以让您根据PEP 8指南测试自己的代码。
在我看到它时,威廉的答案与why use getters and setters有关,这是一个与语言无关的问题,其中接受的答案是为什么访问者有时候是一个好主意的原因列表。几乎没有一个与Python相关。大多数都可以用一个词来回答:@property
(或者,在最后一种情况下,attrgetter
)。其余的:
mock
,pickle
等设计用于操作属性。 答案 3 :(得分:0)
您不需要使用“get”方法,您的示例中唯一的区别是,如果您使用new.a
,则可以为其指定新值。
因此,如果您打算使用只读属性,那么get方法是合适的。 (请注意,如果方法返回一个可变对象,则可以修改该对象,因此在技术上不能只读)
答案 4 :(得分:0)
通常在Python中我们只使用普通的属性访问。如果您以后决定需要“getters”和“setter”,则可以轻松将其转换为properties。您不需要为了“以防万一”而混淆代码
对我而言,一个重要的一点就是you don't need to change any code that uses the class当你这样做时。