2016-09-14 83 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()正在被調用。很高興知道。