假设我有一个父类foo
和一个继承类bar
这样定义:
class foo(object):
def __init__(self, args):
for key in args.keys():
setattr(self, key, args[key])
self.subinit()
def subunit(self):
pass
...
import math
class bar(foo):
def __init__(self, arg1, arg2, ...):
args = locals()
del args['self']
super(foo, self).__init__(args)
def subunit(self):
super(foo, self).subinit()
self.arg1 = math.radians(self.arg1)
self.arg2 = math.radians(self.arg2)
...
...
我bar
覆盖了由父类subinit
定义的函数foo
。但是,因为我正在从超类构造函数中执行行self.subinit()
。我担心subinit
的{{1}}定义将被用来代替被覆盖的foo
subinit
。那么我的问题是:这里的执行范围是什么?如果我从超类构造函数中调用bar
,它是否会在实例的整体范围内工作并调用subinit
或者它将在函数范围内工作并调用bar.subinit()
< / p>
答案 0 :(得分:0)
为了回答我自己的问题,我在稍微调整一下这个例子后进行了测试:
class foo(object):
def __init__(self, args):
for key in args.keys():
setattr(self, key, args[key])
self.subinit()
def subinit(self):
pass
class bar(foo):
def __init__(self, arg1, arg2, arg3):
args = locals()
del args['self']
super(self.__class__, self).__init__(args)
def subinit(self):
print self.arg1, self.arg2, self.arg3
范围似乎在对象的整体中,而不仅仅在超类中。因此,bar.subinit()
被调用。很高兴知道。