【发布时间】:2014-04-06 22:43:51
【问题描述】:
人们倾向于认为 getter 和 setter 不是 Pythonic,而是更喜欢使用 @property。我目前正在尝试扩展使用@property 来支持字典的类的功能:
class OldMyClass(object):
@property
def foo(self):
return self._foo
@foo.setter
def foo(self, value):
self.side_effect(value)
self._foo = value
class NewMyClass(object):
@property
def foo(self, key): # Invalid Python
return self._foo[key]
@foo.setter
def foo(self, key, value): # Invalid Python
self.side_effect(key, value)
self._foo[key] = value
当然,我可以创建一些帮助类来处理这个问题,但似乎只编写带有键和值的 setter/getter 函数会简单得多。但是有没有更 Pythonic 的方式来进行这种重构?
【问题讨论】:
-
我不太明白你的问题。
foo.setter是什么?通常,这只有在您之前已经定义了一个名为foo的getter 时才有效。另外,您打算如何使用生成的对象?key应该如何使用? -
是的,我没有包括吸气剂,因为我认为它并不真正相关。为了清楚起见,我将添加它。我不明白你关于我打算如何使用结果对象的问题
-
我的意思是,您打算使用什么代码来设置键/值?对于普通属性,您可以使用
obj.prop = value。你想做什么呢? -
理想情况下我想做 obj.prop[key]=value
-
那你为什么需要一个属性呢?把
prop做成普通字典就好了。
标签: python coding-style setter getter getter-setter