2016-11-29 1 views
1

내가 노력하고 최선의 예를 들어 설명하고 무엇을 할 수있는 방법이 있는지 궁금 오전 : a.py의Q : 기본 클래스와 파이썬 패키지 구조

내용 :

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()Ab.py에, run 방법으로 바꿀 필요없이 사용할 수 있습니다. 위의 예에서 "new class"를 인쇄하려면

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')