Python 是否覆盖差异实例变量中的值?
为什么要将前面的值放入不同的实例变量中 例如:Python 是否覆盖差异实例变量中的值?,python,python-3.x,python-2.7,Python,Python 3.x,Python 2.7,为什么要将前面的值放入不同的实例变量中 例如: d1=myDict() d2=myDict() d1.转让(2,3) d2.转让(2,2) 打印(d1.getval(2)) 打印(d2.getval(2)) 类myDict(对象): “”“在不使用字典的情况下实现字典”“” aDict={} 定义初始化(自): “”“表示的初始化”“” #填写这个 def分配(自身、k、v): “”“k(键)和v(值),不可变对象”“” #填写这个 self.k=k 自我评价,自我评价 如果self.k不在m
d1=myDict()
d2=myDict()
d1.转让(2,3)
d2.转让(2,2)
打印(d1.getval(2))
打印(d2.getval(2))
类myDict(对象):
“”“在不使用字典的情况下实现字典”“”
aDict={}
定义初始化(自):
“”“表示的初始化”“”
#填写这个
def分配(自身、k、v):
“”“k(键)和v(值),不可变对象”“”
#填写这个
self.k=k
自我评价,自我评价
如果self.k不在myDict.aDict中:
self.aDict[self.k]=self.v
其他:
self.aDict[self.k]=self.v
def getval(self,k):
“”“k,不可变对象”“”
#填写这个
如果myDict.aDict中有k:
返回myDict.aDict[k]
其他:
KeyError('KeyError已成功引发')
#返回myDict.aDict[k]
def删除(self,k):
“”“k,不可变对象”“”
#填写这个
如果myDict.aDict.keys()中有k:
德尔·麦迪克特.阿迪克特[k]
其他:
raise KeyError('KeyError已成功引发')
定义(自我):
返回str(myDict.aDict)
d1=myDict()
d2=myDict()
d1.转让(2,3)
d2.转让(2,2)
打印(d1.getval(2))
打印(d2.getval(2))
我的输出:
2
2
4
1
正确输出:
3
2
4
1
aDict
已定义为类级属性,这意味着myDict
的所有实例将共享相同的aDict
要为每个实例分配一个单独的aDict
,您应该在\uuuu init\uuu
方法中执行此操作
def __init__(self):
self.aDict = {}
看起来,
aDict
不是一个实例变量,而是一个静态变量。这意味着在类级别上只有一个aDict
实例,该实例由myDict
类的所有实例共享。因此,您在任何给定的myDict
实例中对aDict
所做的任何更改都将反映在所有myDict
实例中
此外,我想指出的是,你没有按照作业的指示去做。你的类的docstring说明你必须在不使用字典的情况下实现这个类。我得到了以前的实例变量值,尽管我声明了两个不同的实例变量。如果你的任务是在不使用字典的情况下实现字典,你不应该使用
aDict={}
-字典。你太棒了,兄弟。我终于在这门课上得了满分。因为这个小问题,我输了6分。非常感谢你!