【发布时间】:2021-08-27 21:44:10
【问题描述】:
下面的源代码将在最后一行引发异常。如果它们是两个不同的对象,为什么会引发异常?
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 始终是一个静态对象。当我改变一个对象时,它会改变另一个对象。
【问题讨论】:
-
" 总是一个静态对象。当我改变一个对象时,它会改变另一个对象。" 是的,这就是类属性的重点
-
与其他语言不同,Python 类只定义类属性,从不定义实例属性。实例属性总是通过直接修改实例来创建,尽管这通常是通过实例方法完成的。
标签: python class object inheritance constructor