2012-03-19 4 views
3

저는 사람들이 자신의 플러그인을 작성할 수있는 프레임 워크를 제공하려고합니다. 이 플러그인은 기본적으로 파생 클래스입니다. 내 기본 클래스 초기화하려면 몇 가지 변수가 필요합니다, 어떻게 내 파생 된 클래스를 기본 클래스 초기화에서 변수를 피드하지 않고 내 기본 클래스를 초기화 할 수 있습니까? 이것이 내가 귀찮게 할 수있는 플러그인을 쓰는 사용자가 원하지 않는 무언가 때문에파생 된 클래스에서 오는 변수로 기본 클래스를 초기화하십시오.

#!/bin/python 

class BaseClass(): 
    def __init__(self,config): 
     self.config=config 
    def showConfig(self): 
     print "I am using %s" % self.config 

class UserPlugin(BaseClass): 
    def __init__(self,config): 
     BaseClass.__init__(self,config) 
    def doSomething(self): 
     print "Something" 


fubar = UserPlugin('/tmp/config.cfg') 
fubar.showConfig() 

내 목표는 UserPlugin 클래스의 구성 매개 변수를 정의 할 필요가 없도록하는 것입니다.

+0

을 나는 당신의 질문을 이해하지 않는다, 당신은 BaseClass.config 자체의 값을 변경하려는 경우, 당신은 직접 (즉, BaseClass.config = '/foo/path'에 액세스해야 있음을 유의하십시오.. 나는'UserPlugin'이 인스턴스화 될 때 플러그인 생성자가 설정 경로를 전달하지 않도록하고 싶습니다.하지만 어디에서 설정 경로를 가져 오시겠습니까? 기본 설정 경로를 원하십니까? 또한 기본 클래스를 초기화 할 때만 기본 클래스를 초기화합니다 .'UserPlugin' 인스턴스를 생성 할 때'BaseClass .__ init __()'을 호출하지만'UserPlugin' 인스턴스를 초기화하는 중입니다 – senderle

+0

내 질문은 그게 정확히 그거야. 나는 UserClop이 시작될 때 BaseClass가 시작된다는 것을 알고있다. . 요점은 UserPlugin이 파생 클래스에 해당 변수를 전달하지 않고 변수를 시작해야하는 BaseClass에서 메서드를 상속하는 깨끗한 방법을 원한다는 것입니다. 내가 상상할 수있는 것을 잊어 버리고 Baseclass를 먼저 시작한 다음 BaseClass 내부에서 UserPlugin을 시작하는 것도 가능하지만 조금 추한 것 같습니다. –

+0

그러나 당신은 여전히 ​​내 질문에 대답하지 않았습니다. 구성 경로는 어디서 오게할까요? [나는 야생 추측을했다] (http://stackoverflow.com/a/9786902/577088). – senderle

답변

1

당신은 기본 클래스에 남아있는 인수를 전달하는 argument lists을 사용할 수 있습니다 : 당신의 페이스트 빈 코드를 기반으로

class UserPlugin(BaseClass): 
    def __init__(self, *args, **kwargs): 
     BaseClass.__init__(self, *args, **kwargs) 
+0

네, 이해합니다. 그러나 게시 된 코드와 크게 다르지 않으며, 어떻게 든 피하고 싶습니다. 나는 클래스 상속을 잊어 버리고 초기화 된 baseclass 또는 그 라인을 따라 뭔가 안에 플러그인 클래스를 시작해야 할 것 같아요. 정보를 가져 주셔서 감사합니다. –

1

, 이건 어때요? 이렇게하면 클래스 속성을 사용하는 대신 별도의 전역 클래스를 사용하지 않아도됩니다. 클래스 속성은 모든 파생 클래스와 해당 인스턴스의 멤버로 액세스 할 수 있습니다.

#!/bin/python 

class BaseClass(): 
    config = '/tmp/config.cfg' 
    def __init__(self): 
     pass 
    def showConfig(self): 
     print "I am using %s" % self.config 

class UserPlugin(BaseClass): 
    def __init__(self): 
     BaseClass.__init__(self) 
    def doSomething(self): 
     print "Something" 


fubar = UserPlugin() 
fubar.showConfig() 

이것은 이전에 언급 한 것과 다른 방법입니다. 변경 BaseClass.config를 떠나, 그렇지 않으면, 사용자 정의 UPinstance.config 가치를 창출 바람

+0

개체와 상속이 어떻게 작동하는지 이해합니다. 내 실제 목표는 UserPlugin 클래스가 기본 클래스를 올바르게 초기화하는 데 필요한 것을 무료로 유지하는 것입니다. 이것은 어리석은 것처럼 보입니다. 그러나 나는 가능한 한 낮은 파생 클래스를 만들기위한 "요구 사항"을 유지하기를 원합니다. 구문 질문보다 오히려 조직적인 질문입니다. 한편 BaseClass가 초기화 할 때 필요한 변수의 전역을 만드는 아이디어를 얻었습니다. http://pastebin.com/KfdVYbPz 세계는 이상적인 것이 아니므로 가능하면 피해야하지만, 제 생각에는 최선의 선택이라고 생각합니다. –

+0

@ jay_t, 나는 그것이 당신의 최선의 선택이라고 생각하지 않습니다. 클래스 속성으로 저장할 수 있습니다. 위 참조. – senderle

관련 문제