【发布时间】:2021-10-17 15:05:57
【问题描述】:
我创建了一个带有字典变量的类,以及一个编辑它的方法:
class Test:
TestDict = {"TestKey": "OldValue"}
def ChangeDictionary(self):
self.TestDict["TestKey"] = "NewValue"
然后,我创建了两个对象:
ObjectOne = Test()
ObjectTwo = Test()
在 ChangeDictionary 方法调用之前和之后打印他们的字典:
# Print values before method call
print(ObjectOne.TestDict)
print(ObjectTwo.TestDict)
# Call method
ObjectTwo.ChangeDictionary()
# Print values after method call
print(ObjectOne.TestDict)
print(ObjectTwo.TestDict)
我得到这个输出:
{'TestKey': 'OldValue'}
{'TestKey': 'OldValue'}
* * Method call * *
{'TestKey': 'NewValue'}
{'TestKey': 'NewValue'}
因此,从第二个对象调用的 ChangeDictionary 方法也更改了值,并且在第一个对象中也发生了更改。
是 Python 语言错误还是其他地方的原因?
更新: 如果类变量是任何其他类型(例如 - 字符串) - 在第一个对象变量中将具有旧值:
class Test:
TestString = "OldValue"
def ChangeString(self):
self.TestString = "OldValue"
【问题讨论】:
-
@tevemadar 如果我做对了 - 不。在您发布的链接的主题中,讨论了从对象更改类的变量。我的问题是为什么在我从其他对象(同一类的实例)调用方法后对象的字典值会发生变化,如果我将变量类型更改为任何其他(例如字符串)值将保持不同。
-
TestDict被所有对象共享,因为它没有在__init__中定义。要解决此问题,请创建一个self.TestDict并在__init__函数中对其进行初始化。详情请查看我的回答。 -
如果它有助于解决您的问题,请标记答案:)
-
@AkshaySehgal 但为什么它只适用于字典?如果变量将具有字符串类型,则在我更改它之后 - 第一个对象将具有旧值。
-
“它是 Python 语言错误”这不应该是你第一次喜欢这样的东西,几乎可以肯定,你只是不理解一些东西
标签: python python-3.x dictionary methods