현재 Python C API를 사용하여 Python (v3.5) 확장 모듈을 작성하는 방법을 배우고 있습니다. 빠른 수치 작업과 같은 일부 작업은 C로 수행하는 것이 가장 좋지만 문자열 조작과 같은 다른 작업은 Python에서 구현하기가 훨씬 쉽습니다. 새로운 유형을 정의하기 위해 Python과 C 코드를 모두 사용하는 합의 된 방법이 있습니까?Python과 C 모두에서 Python 클래스 정의하기
예를 들어, 기본 저장 및 산술 연산을 지원하는 C 형식의 Matrix
을 작성했습니다. 파이썬을 사용하여 Matrix.__str__
을 정의하고 싶습니다. 여기서 문자열 조작은 훨씬 쉬우 며 cstring에 대해 걱정할 필요가 없습니다. 이 코드를 실행하면, 나는 TypeError: can't set attributes of built-in/extension type 'matey.Matrix'
를 얻을 수
from mymodule._mymodule import Matrix;
def as_str(self):
print("This is a matrix!");
Matrix.__str__ = as_str;
:
나는__init__.py
에서 모듈로드를 다음과 같이하면
__str__
방법을 정의하려고했습니다. 이것을 할 수있는 방법이 있습니까? 솔루션이 서브 클래스
Matrix
인 경우 모듈 내에서 구성된 C 기본 클래스/Python 서브 클래스를 유지하는 가장 좋은 방법은 무엇입니까?
구조체 아마 복잡한 데이터에 유용에 올 것이다 기존의 OOP 방식 (예를 들어, 행렬)로 확장
_Matrix
유형을 정의 할 수 있습니다. ctypes.Structure 봐봐 – eddiewould좋은 생각. 그러나, 나는'numpy' 배열이 어떻게 동작하는지 에뮬레이트하려고 노력하고 있습니다. (배우기 위해서, 저는 프로덕션에서 내 자신의 선형 대수 루틴을 롤백하는 것보다 낫습니다). 앞뒤로 복사하는 것이 너무 느리기 때문에 C에 행렬 데이터를 저장하고 싶습니다. –
그래 - 그러므로 매트릭스 데이터를 표현하기 위해 C 구조체를 사용하라는 나의 제안. 파이썬에서 "앞뒤로 복사"하지 않고도 C 구조체에 액세스 할 수 있습니다. – eddiewould