2010-04-04 5 views
6

pysparse 라이브러리의 행렬 유형에 몇 가지 추가 메소드를 추가하려고합니다. 그 외에도 새 클래스가 원본과 똑같이 작동하도록하려면 상속을 사용하여 변경 사항을 구현하기로했습니다. 그러나, 나는Python : C 확장자에서 상속받을 수 없습니다.

from pysparse import spmatrix 

class ll_mat(spmatrix.ll_mat): 
    pass 

이 문제는이 오류의 원인이 무엇 다음과 같은 오류

TypeError: Error when calling the metaclass bases 
    cannot create 'builtin_function_or_method' instances 

결과 시도? 위임을 사용하여 내 새 클래스가 원래와 똑같은 방식으로 작동하도록 할 수 있습니까?

답변

9

ll_mat은 유형 자체가 아니라 function으로 기록되어 있습니다. 이디엄은 "팩토리 함수"로 알려져 있습니다.이 함수는 "생성자 호출 가능"이 인수에 따라 다른 실제 기본 유형을 반환 할 수있게합니다.

당신이에서 개체를 생성하고 그 객체의 형식에서 상속을 시도 할 수 있습니다 : 그것은 내장 타입은 지원하지 않습니다 선언하기에 매우 가능하다고하지만,

x = spmatrix.ll_mat(10, 10) 
class ll_mat(type(x)): ... 

가 인식 서브 클래 싱되고있다 (약간의 간접비를 절약하기 위해서조차도 가능하다). 그 유형이 무엇인지, 당신은 그것을 서브 클래스 수 없으며, 오히려 등 봉쇄 및 위임, 즉 :

class ll_mat(object): 
    def __init__(self, *a, **k): 
     self.m = spmatrix.ll_mat(*a, **k) 
     ... 
    def __getattr__(self, n): 
     return getattr(self.m, n) 

을 사용해야합니다
관련 문제