0
私はGUI用の単純なデータモデルクラスを持っています。このクラスでは、キーワード引数 "timeDict"を渡さない場合にタイムスタンプを付加するaddPntメソッドがあります。私はデフォルト値({})がaddPntを呼び出すたびにtimeDictに設定されることを期待していました。しかし、デバッグ中は、timeDictは最初の呼び出しからの値をaddPntに保持します。以下のコードを参照Strange Behavior ....呼び出し後にキーワード引数を保持するPythonクラスバインドメソッド
class LastTSDict(dict):
def __getitem__(self, name):
try:
return super(LastTSDict, self).__getitem__(name)
except KeyError:
self.__setitem__(name,timestamp.getTimestamp())
return self.__getitem__(name)
class DataElementDict(dict):
def __init__(self,maxLen):
self.maxLen=maxLen
self.lastTS=LastTSDict()
def __getitem__(self, name):
try:
return super(DataElementDict, self).__getitem__(name)
except KeyError:
if name==0:
self.__setitem__(name,defaultdict(partial(defaultdict,partial(deque, maxlen=self.maxLen))))
else:
self.__setitem__(name,defaultdict(partial(defaultdict,partial(deque, maxlen=self.maxLen/8))))
return self.__getitem__(name)
class Model(object):
def __init__(self,maxLen=8192,extPeriods=[5,60,300,900,3600,86400]):
self.DATA=DataElementDict(maxLen)
self.extPeriods=extPeriods
def addPnt(self,key,value,timeDict={}):
try:
pdb.set_trace()
if 'ts' not in timeDict.keys():
timeDict['ts']=timestamp.getTimestamp()
if 'tu' not in timeDict.keys():
timeDict['tu']=timestamp.unixTime(timeDict['ts'])
self.DATA[0][key]['v'].append(value)
for keyt in timeDict.keys():
self.DATA[0][key][keyt].append(timeDict[keyt])
ここでは何が起こっていますか?
おかげで、知っていたことはありません – scientificCompNoob