我有一个有两个属性的类,当我为我设置一个新值时,foo
我希望它的值bar
也改变,所以我可以使用这样的东西:
class MyClass(object):
_foo = ''
_bar = ''
@property
def foo(self):
return self._foo
@foo.setter
def foo(self, foo):
self._foo = foo.lower()
self._bar = foo.upper()
@property
def bar(self):
return self._bar
我不想以当我改变 changebar
的值时反映另一个方向的foo
变化,所以我没有实现 setter for bar
.
阅读有关干净代码实践的内容后,我发现根据方法的确切作用来命名方法是一个好习惯,因此我认为,与其使用上面的语法,不如使用这个似乎更易于解释的定义:
def set_foo_and_bar(self, foo):
self._foo = foo.lower()
self._bar = foo.upper()
现在的问题是我失去了pythonic语法object.property
。真诚地我认为这是一个愚蠢的问题,但我想知道处理这种依赖操作的定义的好习惯是什么,我应该使用第一种语法还是第二种?,如果该setter
方法更多地改变状态怎么办大幅度地,说改变更多的属性?,我应该使用注释来说明这两个属性之间存在依赖关系吗?还是让客户自己发现“神奇”的行为?