【发布时间】:2014-03-02 07:55:49
【问题描述】:
我想知道在 Python 中使用 OPP/Classes/Instances 时,在读写类的属性/变量时是否应该始终使用 getAttr()/setAttr()。还是直接处理变量/属性(例如 self.my_attr = "some_value")会更好?
直接访问类属性
class MyClass(object):
def __init__(self):
super(MyClass, self).__init__()
self.my_attr = 'My_Value'
def doSomething(self):
localVariable = self.my_attr
print localVariable
使用类的方法访问类的属性
class MyClass(object):
def __init__(self):
super(MyClass, self).__init__()
self.my_attr = 'My_Value'
def getMyAttr(self):
return self.my_attr
def doSomething(self):
localVariable = self.my_attr
print localVariable
稍后编辑:
在阅读“面向对象的思维过程”一书时(Matt Weisfeld:开发者图书馆)……作者在整个过程中不断地陈述:
"...对对象内属性的访问应由对象控制 本身——任何其他对象都不应该直接改变另一个对象的属性……”
"...如果您控制对属性的访问,当出现问题时,您可以 不必担心跟踪可能改变了代码的每一段代码 属性——它只能在一个地方改变(setter)..."
那时我会坚持使用 setter 和 getter。此处建议/提及 Python 的 @property 和 @.setter 使其更加容易。
【问题讨论】:
-
关于你的编辑:别人的想法一般不会不经过反思就被采纳。只是因为它印在一本书上,事实不会成为真实的。 “最佳”实践仅对于给定的“最佳”值和给定的“实践”值是“最佳”的。将每一点都放入 setter 和 getter 会导致 Java 的 getter-setter-hell(我觉得任何 Java 代码都是 90% 的样板代码),相信“我们都是成年人”(正如 python 的禅宗所暗示的那样)可能是更糟糕。也许真相就在某个地方,介于两个极值之间。
标签: python class methods instance attr