2011-08-03 2 views
2

내가받는 매개 변수의 정확성을 검사하는 방법에 대한 조언이 필요합니다.파이썬 : 어떻게 확인 하시겠습니까?

검사는 C++에서 수행 될 것이므로 Boost.Python (선호) 또는 C API를 사용하는 좋은 해결책이 있다면 그것에 대해 말해주십시오. 그렇지 않으면, 개체가 조건에 맞는지 확인하기 위해 어떤 특성이 필요한지 말해주십시오.

그래서 ...

  1. 당신은 어떻게 객체가 기능 것을 확인합니까?
  2. 개체가 바인딩 된 메서드인지 어떻게 확인합니까?
  3. 개체가 클래스 개체인지 어떻게 확인합니까?
  4. 클래스 개체가 다른 클래스의 하위인지 어떻게 확인합니까?
+0

왜 물건의 종류를 확인해야합니까? – JBernardo

+0

@JBe : 이벤트 시스템입니다. 어떤 콜백이 관심이 있는지 알 수 있도록 이벤트 유형을 확인해야합니다. –

답변

3

의심 스럽다면 보통의 파이썬 내장 함수를 호출하고 C/C++로 변환하여 필요한 효과를 얻는 방법을 생각해보십시오. 파이썬에서 대답 할 것입니다. C에서는 '호출 가능'과 같은 전역을 검색 한 다음 다른 파이썬 함수처럼 호출합니다.

  1. 왜 다른 종류의 호출 가능 함수가 아닌가? 원할 경우 내장형 callable(f)을 사용하여 호출 할 수 있는지 알아낼 수 있지만 물론 호출 할 때 전달해야하는 인수를 알려주지는 않습니다. 여기서 가장 좋은 점은 일반적으로 그것을 호출하고 어떤 일이 발생하는지 확인하는 것입니다.

  2. isinstance(f, types.MethodType)하지만 기본 제공 방법 인 경우 도움이되지 않습니다. 함수를 또는 바인딩 메서드으로 호출하는 방법에는 차이가 없으므로 위와 같이 호출 할 수 있는지 확인하고 싶을 것입니다.

  3. isinstance(someclass, type) 여기에는 기본 제공 유형이 포함됩니다.

    1) 확인하지 마십시오

0

  • issubclass(someclass, baseclass)

    나는 당신이 개 틀에 얽매이지 않는 권장 사항을 가지고있다. 파이썬 문화권은 필요에 따라 객체를 단순히 사용하는 것이며, 작동하지 않는다면 예외가 발생합니다. 미리 확인하면 오버 헤드가 추가되고, 필요 이상으로 엄격하게 확인하므로 사람들이 코드를 사용할 수있는 방법이 제한 될 수 있습니다.

    2) C++에서 체크인하지 마십시오. 파이썬과 C (또는 C++)를 결합 할 때는 C++에서해야 할 일만 수행하는 것이 좋습니다. 다른 모든 것은 파이썬으로 수행되어야한다. 따라서 파이썬 래퍼 함수에서 매개 변수를 확인한 다음 선택되지 않은 C++ 진입 점을 호출하십시오.

  • +0

    두 번째 사항에 관해서는 지금 당장하고 있습니다. :) 내 '실제'클래스는 파이썬에 대해 불가지론 적이지만, 래퍼 클래스 만 인터페이스를 수행합니다. –

    +2

    첫 번째 사항 : 실수를 저지른 부분에 관해 스크립터에게 설명하고 싶습니다. 소프트웨어가 충돌 할 때 즐겁지는 않지만 그 이유를 알려주지는 않습니다. 나는 단지 최소한을 점검 할 것이고, 나는 엄격하지 않기를 바랄 것이다. –