【发布时间】:2011-10-12 14:20:00
【问题描述】:
我有两个类,如下所示:
class Super(object):
def __init__(self, arg):
self.arg = arg
def load(self):
# Load data from disk if available
try:
self.data = load_routine()
except IOError as e:
if e[0] == errno.ENOENT:
pass
else:
raise
class Sub(Super):
def __init__(self, arg2, *args, **kwargs):
super(Sub, self).__init__(*args, **kwargs)
self.arg2 = arg2
def load(self):
# Load files specific to superclass
super(Sub, self).load()
# Load data from disk if available
try:
self.data2 = another_different_load_routine(self.arg2)
except IOError as e:
if e[0] == errno.ENOENT:
pass
else:
raise
我希望代码足够清晰,除非我错过了什么,否则这应该适用于两个类,例如:obj = Super(); obj.load()。
但是,我实际上希望在 __init__() 的末尾自动调用 load 方法,但我不确定如何实现这一点。如果我在两个类的__init__() 末尾添加self.load(),则子类的load() 方法将被调用两次,如果尝试创建Sub 的实例,一次来自超类,一次来自子类。
如果我只在超类的 init 方法的末尾调用self.load(),它只会被调用一次,但对象还没有被初始化为包含加载所需的属性。
在实例化Sub 时,我想要的是它为超类和子类初始化__init__ 中的所有属性,并为超类和子类调用load()。是否按顺序
Super -> __init__()、Super -> load()、Sub -> __init__()、Sub -> load()
或
Super -> __init__()、Sub -> __init__()、Super -> load()、Sub -> load()
不重要。我怎样才能做到这一点?
【问题讨论】:
标签: python oop inheritance constructor