Python - 涉及对象继承的函数调用

时间:2016-09-14 18:29:18

标签: python class inheritance scope initialization

假设我有一个父类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>

1 个答案:

答案 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()被调用。很高兴知道。