我是一個自學成才的程序員,我最近一直在學習python。我遇到了一個奇怪的問題,但我想這只是我不知道Python語法和/或程序流程的結果。Python類實例變量隔離
我有一個叫做Test
的類,它位於文件TestClass.py
中。 `
class Test:
__tags = {}
__fields = {}
def __init__(self, tags: dict={}, fields: dict={}):
self.__tags = tags
self.__fields = fields
def setTag(self, key, value):
self.__tags[key] = value
def getTag(self, key):
return self.__tags[key]
def setField(self, key, value):
self.__fields[key] = value
def getField(self, key):
return self.__fields[key]
def getAll(self):
return [
{
'tags': self.__tags,
'fields': self.__fields
}
]
我測試了這個類的功能在一個文件中包含的程序代碼,test.py
import TestClass
t1 = TestClass.Test()
t1.setTag('test1', 'value1')
t1.setField('testfield', 'fieldvalue')
t2 = TestClass.Test()
t2.setTag('test2', 'value2')
print(t1.getAll())
print(t2.getAll())
的print
陳述事情變得怪異。輸出應該是:
[{'tags': {'test1': 'value1'}, 'fields': {'testfield': 'fieldvalue'}}]
[{'tags': {'test2': 'value2'}, 'fields': {}}]
但實際產量爲...
[{'tags': {'test2': 'value2', 'test1': 'value1'}, 'fields': {'testfield': 'fieldvalue'}}]
[{'tags': {'test2': 'value2', 'test1': 'value1'}, 'fields': {'testfield': 'fieldvalue'}}]
但爲什麼呢?
編輯:的Python 3.5
你介意我問這是怎麼改變輸出的,我以前沒見過這個或者是關鍵字的用法? –
這實際上爲我清除了一些東西。首先,我遇到了「'NoneType'對象不支持項目分配的問題」(設置'tags:dict = None')。其次,我遇到了我的問題中所描述的問題。這清除了兩者,'或'很有意義!謝謝!在8分鐘內將接受這個答案。 – nwilging
三,如果你包括「東西必須是私人的,我會把雙下劃線到處」! – jonrsharpe