所有,我有一個幾個列表對象類,定義如下:的屬性設置爲一個單獨的列表元素
class Device:
def __init__(self):
self._channels = [None]*6
self._outputs = [None]*4
@property
def channels(self):
return self._channels
@channels.setter
def channels(self,value):
print("inside:",self.channels, value)
self._channels = value
這裏奇怪的是,在調用device.channels[1] = 'try'
作品,但似乎並沒有爲'通過@ setter.channels函數。從下面的輸出顯示古怪:
device = Device()
print("before:",device.channels)
device.channels[1] = "try"
print("after:",frmdeviced.channels)
device.channels = "try2"
print("check:",frm4d.channels)
並且輸出是:
before: [None, None, None, None, None, None]
after: [None, 'try', None, None, None, None] # accessing single element is achieved
# , but not through @channels.setter!
inside: [None, 'try', None, None, None, None] try # only here we're
check: try2 # at least the setter works..
由於我需要邏輯時的channels
單個元件被設置爲運行,這種行爲是有問題的。 我想知道導致這種行爲的基礎python機制是什麼,它是如何被覆蓋?是否有更多pythonic方式來實現設置/獲取特定列表元素的目標?
您需要在'channels'引用的對象上實現'__setitem__',在'Device'上執行它是沒有意義的。 – jonrsharpe
設置列表的一個元素是列表的一個操作,而不是交給列表的'Device'的操作。 – user2357112