下面的源代码将在最后一行引发异常。如果它们是两个不同的对象,为什么会引发异常?
class BaseClass(object):
accounts = dict()
def AddAccount(self, account_id, account_var):
if account_id in self.accounts.keys():
raise Exception('Account already exists')
self.accounts.update({account_id: account_var})
class Class1(BaseClass):
pass
class Class2(BaseClass):
pass
ACCOUNT_ID = '123'
c1 = Class1()
c2 = Class2()
c1.AddAccount(ACCOUNT_ID, 'abc')
c2.AddAccount(ACCOUNT_ID, 'abc')
我试过在每个类中调用构造函数,但这并不能解决问题。我在每节课上都喜欢这样:
def __init__(self):
super().__init__()
看起来BaseClass
始终是一个静态对象。当我改变一个对象时,它也会改变另一个对象。
您已将accounts
定义为类的变量,而不是实例变量。您应该在基类的__init__
方法中定义accounts
,以便为您创建的类的每个实例使用不同的引用进行实例化。
class BaseClass(object):
def __init__(self):
self.accounts = dict()
def AddAccount(self, account_id, account_var):
if account_id in self.accounts.keys():
raise Exception('Account already exists')
self.accounts.update({account_id: account_var})
您已经在BaseClass
的主体中定义了一个类变量。
即使使用self.accounts
引用它,它也不是实例变量。
例如,如果您想要一个实例变量,您应该使用self.accounts = {}
在__init__()
中初始化它