2016-06-30 3 views
2

내가 파이썬 클래스는 다음과 같은 방법으로 선언을 사용하여 파이썬에서 구조 필드를 문서화하는 방법 :스핑크스

class Foo(Structure): 
    _fields_ = [ 
     ("vr", c_double), 
     ("vi", c_double), 
     ("vm", c_float), 
     ("va", c_float)] 
그들은 내가 C DLL을 래핑하는 ctypes을 사용하고 있기 때문에 Structure의 서브 클래스

및 이들의 거울이다 C 구조체. 나는 이들에 대한 문서를 생성하는 방법을 이해할 수 없다. 자동 생성 된 문서는 매우 추악하고 쓸모가 없습니다. va Structure/Union member vi Structure/Union member vm Structure/Union member vr Structure/Union member

내가 어떻게 정의 할 수 있는지 알 수있는 사람이 있습니까?

나는 단지 _fields_의 종류가 실제로 존재하지 않는다는 것을 분명히 밝히고 싶었습니다. ctypes의 특수 기능은 C 구조체와 일직선으로 정렬 할 수있는 방법으로 멤버를 선언하는 방법을 제공합니다. 그래서 객체를 인스턴스화하는 경우 : foo = Foo() 그러면 나는 결코 평범한 인스턴스 변수로 선언 된 것처럼 _fields_에 액세스하지 않고 멤버를 직접 액세스합니다. 위의 인스턴스를 사용하여 에 액세스하려면 print foo.vr과 같은 작업을 수행합니다.

나를 위로 부추 기는 것은 그 변수에 대한 설명을 추가하고 싶습니다. 자동 생성은 구조체의 구성원이기 때문에 "구조체/조합 멤버"라고 부릅니다. 그러나 더 설명적이고 유용한 설명을 추가하려고합니다. 예를 들어, "vm"은 크기이고 "va"는 각도라는 주석을 추가하고 싶습니다.

+0

을' Foo 클래스에는 docstring이 있어야합니다. 그 문서화 문자열에서'_fields_' 변수를 기술 할 수 있습니다. 아마도 단순히 그 정의를 축 어적으로 포함하는 것입니다. 그것이 내가 생각할 수있는 것입니다. – mzjn

+0

감사합니다. 그것은 매우 합리적인 제안처럼 보입니다. 나는 그것을 시도 할 것입니다. – zaknotzach

+0

"* 해당 변수에 대한 설명을 추가하고 싶습니다 *". 당신은 그것을 할 수 있고 나는 예제를 제공했다. 정확히 너를 위장하고있는거야? – mzjn

답변

1

automodule 지시문에 대한 :undoc-members: 옵션이 제거되면 원하지 않는 자동 생성 문서가 사라집니다.


Foo 클래스에 문서화 문자열을 추가합니다. 그 문서화 문자열에 _fields_ 클래스 변수를 기술하십시오. 아마도 그렇게하는 가장 쉬운 방법은 단순히 축 어적으로 정의를 포함시키는 것입니다. 이런 식으로 뭔가 : ( info fields 사용)

class Foo(Structure): 
    """ 
    This class is used to... 

    Instances of this class have the following members: 

    * ``vr`` (type: c_double): whatever 
    * ``vi`` (type: c_double): something 
    * ``vm`` (type: c_float): magnitude 
    * ``va`` (type: c_float): angle 
    """ 

    _fields_ = [ 
     ("vr", c_double), 
     ("vi", c_double), 
     ("vm", c_float), 
     ("va", c_float)] 

또 다른 대안 : 여기

class Foo(Structure): 
    """ 
    This class is used to... 

    The ``_fields_`` class variable is defined as follows:: 

     _fields_ = [ 
     ("vr", c_double), 
     ("vi", c_double), 
     ("vm", c_float), 
     ("va", c_float)] 
    """ 

    _fields_ = [ 
     ("vr", c_double), 
     ("vi", c_double), 
     ("vm", c_float), 
     ("va", c_float)] 

당신이 원하는에 가까운 수 있습니다 그것을하는 또 다른 방법입니다

class Foo(Structure): 
    """ 
    This class is used to... 

    :ivar vr: whatever 
    :vartype vr: c_double 
    :ivar vi: something 
    :vartype vi: c_double 
    :ivar vm: magnitude 
    :vartype vm: c_float 
    :ivar va: angle 
    :vartype va: c_float 
    """ 

    _fields_ = [ 
     ("vr", c_double), 
     ("vi", c_double), 
     ("vm", c_float), 
     ("va", c_float)] 
+0

그러나 명확히하기 위해 '_fields_'는 ctypes/structure에 사용되는 특수 멤버입니다.기본적으로 그 클래스의 멤버를 정의하고 있습니다. 그래서'Foo' 클래스의 인스턴스에서 다음과 같이 접근 할 수 있습니다 :'foo.vm = 0.5' – zaknotzach

+0

나는 당신이 질문을 업데이트 한 것을 본다. '*하지만 좀 더 설명적이고 유용한 설명을 추가하고 싶습니다. 예를 들어, "vm"은 크기이고 "va"는 각도입니다. * '를 추가하고 싶습니다. 그런 다음 기술을 설명하고 유용한 설명을 문서 문자열에 추가하십시오. 아니면 문제가 있습니까? – mzjn

+0

의견을 보내 주셔서 감사 드리며 다시 테스트 해 보겠습니다. 나는 내가 처음 시작했을 때 그것을 시도했다고 믿는다. 내가 한 일에 대해 무언가가 효과가 없었다. – zaknotzach