涉及对象Inheritan的Python函数调用

2024-09-28 05:22:16 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个父类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重写了由父类foo定义的函数subinit。但是,由于我是从超类构造函数内部执行self.subinit()行。我担心的是,foosubinit定义将被用来代替barsubinit。那么,我的问题是:这里的执行范围是什么?如果我从超类构造函数调用subinit,它将在实例的总体范围内工作并调用bar.subinit(),还是在函数的范围内工作并调用foo.subinit()


Tags: keyself定义fooinitdefbarargs
1条回答
网友
1楼 · 发布于 2024-09-28 05:22:16

为了回答我自己的问题,我在稍微调整了一下示例之后运行了一个测试:

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

相关问题 更多 >

    热门问题