2014-12-29 9 views
13

짧은 버전파이썬에서 PyObject 란 무엇입니까?

나는 최근 함수의 반환 형식이 the documentationPyObject로 지정 된 일부 파이썬 코드를 가로 질러왔다. PyObject은 무엇입니까?

자세한 버전

내가 생각하지 않는 C/C++ 프로그래머,하지만 위의 링크 된 문서에 PyObject으로 실행했을 때, 구글은 PyObject 파이썬/C API를 사용하여 정의 된 파이썬 객체임을 가르쳐 . 구체적으로, API documentation은 다음과 같이 PyObject를 정의합니다.

모든 객체 유형은이 유형의 확장입니다. 이것은 에 객체로의 포인터를 처리하는 데 필요한 정보가 포함 된 유형입니다. 을 객체로 사용합니다. 일반적인 "릴리스"빌드에서는 개체의 참조 횟수와 해당 유형 개체에 대한 포인터 만 포함합니다. PyObject_HEAD 매크로의 확장으로 정의 된 필드에 해당합니다.

솔직히, 나는 이것을 완전히 이해하지 못하는, 또는 내 기본적인 질문에 대한 대답 여부,하지만 그것은 나를 그냥 파이썬 객체, 마침표 등의 PyObject 생각하는 것이 분명 잘못된 생각하지 않습니다. 반면 기술적으로는 PyObject으로 계산되는 유형은 Python/C API를 사용하여 표준 Python의 확장으로 만들어야합니다. 예를 들어, 정수는 PyObject입니까? 파이썬에서 만질 수있는 모든 값이 목록, 사전, 소켓, 파일, 정수, 문자열, 함수, 클래스를 포함 C.에 PyObject입니다

http://docs.scipy.org/doc/numpy/reference/c-api.types-and-structures.html

+1

예를 들어 파이썬 문자열의 C 정의에서 PyObject C 유형을 사용하는 방법에 대한 아이디어를 얻을 수 있습니다. https://github.com/python-git/python/blob/master/Include/stringobject.h – Jivan

+0

또한 내가 아는 한, 파이썬은 C++가 아닌 순수한 C 언어입니다. – Jivan

+0

@ Jivan 확장이 둘 중 하나와 함께 작동 할 수 있다고 생각했지만, 틀린 경우 C++ 태그를 제거 할 수 있습니다 ... – neuronet

답변

9

잠재적으로 관련 링크, 당신을 이름을 붙이다. 파이썬에서이 코드를 만질 수 있다면 PyObject이 C입니다.

+0

다음 두 가지 해석을 봅니다 : 누군가가 'PyObject'를 입력 매개 변수 유형으로 문서에 지정하면 기본적으로'원하는 것 모두 입력이 될 수 있습니다 '. 반면, 기술적으로 C *의 PyObject * 인 경우 Python *에서 입력 매개 변수로 이름을 지정하는 것이 실수가 아닙니까? 설명서는 다음과 같습니다. http://srinikom.github.io/pyside-docs/PySide/QtCore/QAbstractItemModel.html#PySide.QtCore.PySide.QtCore.QAbstractItemModel.createIndex – neuronet

+0

방금 ​​Python의 다른 Python Qt 바인딩은 실제로'PyObject' 대신에 같은 파라미터'object'를 호출합니다 : http://pyqt.sourceforge.net/Docs/PyQt4/qabstractitemmodel.html # createIndex 실제로, 그 함수를 사용할 때, 실제 Python 객체를 피드로 제공합니다. 확실히, 입력이 API를 사용하여 Python 확장을 통해 명시 적으로 생성되었다는 기대는 없습니다. – neuronet

+2

@neuronet : 그렇습니다. Python 문서에서 PyObject가 무엇인지 말하는 것이 실수 일지 모르지만, PySide가 부분적으로 자동 생성된다는 점을 이해할 수 있습니다. PySide가 부분적으로 자동 생성되므로 코드 생성기에 특수 문자가 없을 수도 있습니다. -cased "PyObject는 Python 문서에 나타나서는 안됩니다." 그리고'PyObject'는 Python *으로 정의 된 경우에도 Python *에서 처리 할 수있는 모든 객체입니다. 확장에 의해 정의 될 필요는 없습니다. 그것이'PyObject'를 취한다고 말하면, 그것은 오래된 값을 받아들이는 것입니다. – icktoofay

2

PyObject은 사실 C 레벨의 Python 객체입니다. 그리고 파이썬의 정수는 객체이기 때문에 PyObject입니다. 그것이 파이썬으로 작성되었는지 C로 작성되었는지에 상관없이, C 레벨에 관계없이 PyObject입니다.

+0

그렇다면 나는 icktoofay에게 물어 본 질문이 있습니다. PyObject가 C 레벨에서만 정의 되었다면, 기술적으로 파이썬 레벨 *에서 함수의 입력 유형으로 지정하는 것이 실수라는 것입니까? 예를 들어, 파이썬 함수에 대한 입력을 * any * 또는 다른 모든 항목을 포함하는 용어로 입력해야합니까? – neuronet

+0

@neuronet : 파이썬 함수에 대한 인자는 타입이 없습니다. 파이썬 함수의 C 지원 구현에 대한 인수는 유형을 지정할 수 없습니다. –

+0

제가 이해할 것 같아요. 유형이 매개 변수 목록에 명시 적으로 선언되지 않았다는 점에서 형식이 없습니다. 즉, 특정 유형 (예 : Python에 'TypeErrors'가 있음)을 기대하기도합니다. 참조하고있는 설명서와 예상되는 입력 매개 변수 유형에 대한 설명을 보려면 icktoofay에 대한 주석의 링크를 참조하십시오. 또한'a = str'을 입력하면 파이썬에서는 괜찮습니다. 그러나'a = PyObject'를 입력 해보십시오. NameError가 발생합니다. 다음과 같이 말할 수 있을까요?'PyObject'는 c 타입으로 c가 Python 클래스를 정의하기 위해 사용합니다. 하지만 파이썬에서는 표준 타입이 아닙니다 *. – neuronet