更改兩個屬性值,我有兩個屬性,當我爲foo
設置一個新值的一類,我想的是值的bar
也隨之變化,這樣我就可以像去這樣的:的屬性setter命名慣例,在蟒蛇
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
我不想反映的方式,當我改變bar
foo
變化的價值,所以我沒有實現的setter爲bar
在其他方向上的變化。
閱讀關於乾淨的代碼實踐我發現這是一個很好的習慣,根據它們的具體名稱命名你的方法,所以我認爲,不要使用上面的語法,我可以使用這個定義,似乎更自我解釋:
def set_foo_and_bar(self, foo):
self._foo = foo.lower()
self._bar = foo.upper()
現在的問題是,我失去了Python的語法object.property
。我真的認爲這是一個虛擬問題,但我想知道如何處理這種依賴操作的定義,我應該使用第一種語法還是第二種語法?如果setter
方法更改狀態更劇烈,說更改更多的屬性?,我應該使用註釋來說明這兩個屬性之間存在依賴關係嗎?或者讓客戶發現他自己的'魔術'行爲?
使用佔位符名稱*,當然*不明顯。但在真實的代碼中,我會假設任何不明確的情況都來自錯誤的命名。例如,假設一個GUI小部件的整型屬性'width'和'right_border'。現在不是很奇怪,是嗎? – delnan 2013-04-27 15:16:36
@delnan與你的小部件示例很明顯,屬性是依賴的,比如說我改變了寬度,所以尺寸也發生了變化,但是對於語義上不太接近的屬性,我認爲如果我不是那麼'心智映射'明確的定義。 – Twissell 2013-04-27 15:23:34
請舉個例子。正如我所說的,我只能想象這個問題來自不明名字或其他東西。或者也許屬性*不應該相互影響。 – delnan 2013-04-27 15:25:33