2016-09-14 109 views
0

假设我有一个父类foo和继承类bar定义为这样的函数调用:Python的涉及对象继承

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()。我担心foosubinit定义将用于代替bar的覆盖subinit。那么我的问题就是:这里的执行范围是什么?如果我叫subinit从父类的构造,将它在该实例的全部范围的工作,并呼吁bar.subinit()或将它的功能范围工作,并呼吁foo.subinit()

+0

试试看怎么样? –

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