2011-03-07 7 views
0

내가 바보이기 때문에 편집되었습니다. 원래 수업을 말해야 했어.Python 상속 및 범위 지정 질문

나는 이런 식으로 뭔가를 수행하는 코드가 있습니다

class A(object): 
    def __init__(self): 
    stuff_here() 

class B(object): 
    def func(self): 
    self.a = A() 

file2.py

import file1 
class A(file1.A): 
    def __init__(self): 
    file1.A(self) 
    self.thing = other_thing 

class B(file1.B): 
    pass 

내가 그 부탁을

file1.py을 내가 file2.B를 인스턴스화 할 때() 그것은 file1.A()가 아닌 member2.a에 대해 file2.A()를 사용합니다.

이 방법이 있습니까? 파이썬 규칙을 살펴 보았습니다. 그러나 나는 그것을 오해하고 있습니다.

+3

아마도 '객체'는 '클래스'여야합니다. –

+3

빌드하려는 것에 대해 좀 더 구체적으로 설명해 주시겠습니까? 그러면 대안 제안을 제공 할 수 있습니다. – Thomas

+0

나는 꽤 많은 코드를 가진 클래스를 이미 가지고있는 시스템을 확장하려고한다. 원래 클래스가 내 데이터에 적용되지 않는 가정을하기 때문에 클래스 A의 구현 세부 사항을 1 개 변경해야합니다. – PGM

답변

1

클래스 속성을 사용하여 사용하려는 클래스를 보유 할 수 있습니다. 첫 번째 파일에서

편집 ... 아마 당신이 달성하고자하는 무엇이든 달성하는 더 나은 방법이

class B(file1.B): 
    A = A 

를 사용

class B(object): 
    A = A 
    def func(self): 
     self.a = self.A() 

과 두 번째 파일에 사용 : 질문에 대한 귀하의 의견은 첫 번째 파일의 코드를 실제로 변경하고 싶지 않다는 것을 의미합니다. 이 경우 "원숭이 패치"file1.py을 시도 할 수 있습니다. 당신이 실제로 자신의 버전으로 file1.A 교체 file2.py 이제

import file1 

class A(file1.A): 
    def __init__(self): 
     file1.A(self) 
     self.thing = other_thing 

file1.A = A 

로 작성합니다. 이것은 확실히 해킹이지만 때로는 어딘가에 들어가는 가장 빠른 방법입니다.

+0

+1이지만 예약이 필요합니다. 그것이 OP가 요구하는 것을해야하지만, OP가 실제로 이루고자하는 것이 무엇이든 다른 방법으로 더 잘 수행 될 수 있다는 것을 느낄 수는 없습니다. – Davy8

+0

이것은 확실히 효과가 있었지만 해킹처럼 느껴집니다. 나는 더 우아한 뭔가를 찾을 때까지 계속 전진 할 수 있습니다. 감사합니다. – PGM

0

사용할 클래스를 반환하는 부모 메서드를 정의하고 자식에서 재정의하십시오.