Ave*_*yne 75 python getter-setter
使用get/set似乎是Java中的常见做法(出于各种原因),但我几乎看不到使用它的Python代码.
为什么在Python中使用或避免使用get/set方法?
blo*_*ley 108
在python中,您可以直接访问该属性,因为它是公共的:
class MyClass:
def __init__(self):
self.my_attribute = 0
my_object = MyClass()
my_object.my_attribute = 1 # etc.
Run Code Online (Sandbox Code Playgroud)
如果要对属性的访问或变异执行某些操作,可以使用属性:
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
Run Code Online (Sandbox Code Playgroud)
至关重要的是,客户端代码保持不变.
mgv*_*mgv 53
酷链接:Python不是Java :)
在Java中,您必须使用getter和setter,因为使用公共字段使您无法返回并在以后使用getter和setter改变主意.所以在Java中,你可能也会提前做好准备工作.在Python中,这很愚蠢,因为您可以从普通属性开始并随时改变主意,而不会影响该类的任何客户端.所以,不要写getter和setter.
Nic*_*kis 27
以下是Guido van Rossum在Masterminds of Programming中所说的内容
"对抗语言"是什么意思?
Guido:这通常意味着他们试图继续使用不同语言的习惯.
[...]人们会将所有内容都变成一个类,并将每个访问转变为一个访问器方法,
这在Python中真的不是明智之举; 你将有更多冗长的代码,
更难调试,运行速度慢很多.你知道"你可以用任何语言写FORTRAN吗?" 您也可以使用任何语言编写Java.
Max*_*keh 14
不,这是unpythonic.普遍接受的方法是使用普通数据属性并用属性替换需要更复杂的get/set逻辑的属性.
对你的问题的简短回答是否定的,你应该在需要时使用属性.Ryan Tamyoko在他的文章Getters/Setters/Fuxors中提供了长篇答案
消除这一切的基本价值在于,您希望努力确保每一行代码都对程序员有一定的价值或意义.编程语言适用于人类,而不适用于机器.如果你的代码看起来没有做任何有用的东西,很难阅读,或者看起来很乏味,那么很有可能Python有一些语言功能可以让你删除它.
你的观察是正确的.这不是Python编程的常规风格.属性都是公共的,因此您只需访问(获取,设置,删除)它们,就像使用包含它们的任何对象(不仅仅是类或实例)的属性一样.当Java程序员学习Python时很容易理解,因为他们的Python代码看起来像使用Python语法的Java!
我绝对同意所有以前的海报,特别是@Maximiliano链接到Phillip的着名文章和 @Max的建议,即比设置(和获取)类和实例属性的标准方法更复杂的是使用Properties(或描述符来概括更多)自定义属性的获取和设置!(这包括能够添加您自己的私人,受保护,朋友或任何您想要的政策的自定义版本,如果您需要除公共之外的其他内容.)
作为一个有趣的演示,在Core Python Programming(第13章,第13.16节)中,我想出了一个使用描述符将属性存储到磁盘而不是内存中的示例!是的,这是一种奇怪的持久存储形式,但它确实向您展示了可能的存储示例!
这是另一篇你可能会觉得有用的相关文章: Python:多个属性,一个setter/getter
归档时间: |
|
查看次数: |
85256 次 |
最近记录: |