2016-11-29 44 views
1

我想知道是否有一種方法做什麼,我想,最好用一個例子解釋:問:與基類Python包結構

a.py的內容:

class A(object): 
    def run(self): 
     print('Original') 

class Runner(object): 
    def run(self): 
     a = A() 
     a.run() 

內容b.py:

import a 

class A(a.A): 
    def run(self): 
     # Do something project-specific 
     print('new class') 

class Runner(a.Runner): 
    def other_fcn_to_do_things(self): 
     pass 

基本上,我有一個基本類的文件,我想用於幾個不同的項目。我希望b.Runner.run()可以使用b.py,中的類A,而不需要覆蓋run方法。在上面的例子中,我想代碼

import b 
r = b.Runner() 
print(r.run()) 

要打印「新類」。有沒有辦法做到這一點?這樣做真的很糟糕嗎?是否有更好的方法來構造代碼?

+0

也許'Runner'類的構造函數應該接受一個類型,並使用它所需的任何類型的'run'方法? –

+0

這是一個好主意,但已經有一個很大的代碼庫,它需要一個非常特定的初始化簽名;我不想改變這一點。 – kgully

回答

-1

這似乎有點複雜。 Runner類可能是不必要的,除非您的示例中沒有其他更復雜的內容。如果您的設置不覆蓋原始run(),您可以用另一種方法在B中調用它。請參閱super()上的this postthis post

它可能會更有意義,做這樣的事情:

a.py:

class A(object): 
    def run(self): 
     # stuff 
     print ('Original') 

b.py:

import a 

class B(A): 
    def run(self): 
     return super(A, self).run() 
     # can also do: return A.run() 

    def run_more(self): 
     super(A, self).run() 
     # other stuff 
     print('new class')