由于各种原因,使用get / set似乎是Java中的一种常见做法,但是我几乎看不到使用此代码的Python代码。
为什么要在Python中使用或避免使用get / set方法?
由于各种原因,使用get / set似乎是Java中的一种常见做法,但是我几乎看不到使用此代码的Python代码。
为什么要在Python中使用或避免使用get / set方法?
Answers:
酷链接:Python不是Java :)
在Java中,必须使用getter和setter,因为使用公共字段使您没有机会回头再改变主意,以后再使用getter和setter。因此,在Java中,您还可以避免繁琐的事情。在Python中,这很愚蠢,因为您可以从常规属性开始并随时改变主意,而不会影响该类的任何客户端。因此,请勿编写getter和setter。
在python中,您可以直接访问属性,因为它是公共的:
class MyClass:
def __init__(self):
self.my_attribute = 0
my_object = MyClass()
my_object.my_attribute = 1 # etc.
如果您想对属性的访问或突变做一些事情,可以使用properties:
class MyClass:
def __init__(self):
self._my_attribute = 0
@property
def my_attribute(self):
# Do something if you want
return self._my_attribute
@my_attribute.setter
def my_attribute(self, value):
# Do something if you want
self._my_attribute = value
至关重要的是,客户端代码保持不变。
不,这是不可思议的。普遍接受的方法是使用常规数据属性,然后将需要更复杂的获取/设置逻辑的属性替换为属性。
对于您的问题的简短回答是“否”,您应在需要时使用属性。Ryan Tamyoko在他的Getters / Setters / Fuxors中提供了很长的答案
摆脱所有这些的基本价值是您要努力确保每一行代码对程序员都具有一定的价值或意义。编程语言是针对人类的,而不是针对机器的。如果您的代码看起来没有任何用处,难以阅读或显得乏味,那么Python很有可能具有某些语言功能可以将其删除。
您的观察是正确的。这不是Python编程的正常样式。属性都是公共的,因此您只需访问(获取,设置,删除)它们,就像使用具有属性的任何对象(不仅仅是类或实例)的属性一样。很容易说出Java程序员何时学习Python,因为他们的Python代码看起来像使用Python语法的Java!
我绝对同意所有以前的张贴者,尤其是@Maximiliano链接到Phillip的著名文章,以及@Max的建议,即比设置(和获取)类和实例属性的标准方法更复杂的事情是使用Properties(或Descriptor进行更广泛的概括)自定义属性的获取和设置!(这包括能够添加自己的私有,受保护的,朋友的自定义版本,或者如果您需要公开之外的其他内容,则可以添加您想要的任何策略。)
作为一个有趣的演示,在《Core Python Programming》(第13章,第13.16节)中,我举了一个使用描述符将属性存储到磁盘而不是存储在磁盘中的示例!是的,这是一种奇怪的持久性存储形式,但确实向您展示了一个可能的示例!
这是另一篇可能对您也有用的相关文章: Python:多个属性,一个setter / getter
我们的老师在课堂上展示了一个示例,解释了何时应使用访问器函数。
class Woman(Human):
def getAge(self):
if self.age > 30:
return super().getAge() - 10
else:
return super().getAge()