2016-10-20 5 views
0

저는 이것이 쉬운 방법으로 파이썬에서 수행 할 수없는 것으로 생각하기 시작했습니다. 그 또는 나는 Google이 그것을 해결할 (또는 StackOverflow 답변을 찾을 수있을 정도로)이 질문에 대해 충분히 말로 표현할 수 없다. 이 간단한 설정이 내가 속성에 다시 전화 할 때마다 (그것은 단지 값 1)를 NumPy와 배열을 얻을 수 있는지 확인합니다입력 값이있는 객체 속성 구문 분석

import numpy as np 
class MyObject(): 
    def __getattr__(self, item): 
      return getattr(np.eye(1), item) 

: 여기

는 함께 설명을 수행하는 데 도움이되는 몇 가지 라이트 코드 . 이를 통해 궁극적으로 정수 값을 반환하는 MyObject.sum()과 같은 numpy 배열 함수를 호출 할 수 있습니다.

도 같은 입력을 필요로하는 다른 기능이 있습니다 MyObject.dot (AnotherNumPyArray)

출력 값이 엄격하지 않을 때 나는 특별한 기능이 일어날 갖고 싶어, 지금까지 너무 좋아 ...하지만 정수. 즉 출력으로 ndarray를 얻는 두 번째 경우입니다. 부분적으로이 문제를 해결에서

내 시도 :

import numpy as np 
class MyObject(): 
    def __getattr__(self, item): 
      func = getattr(np.eye(1), item) 
      if type(func()) == np.ndarray: 
       return func()*2 
      else: 
       return func 

유일한 문제는이 불러지고 함수에 입력 매개 변수가없는 경우에만 작동합니다. 나는 if-statement에서 func (value)를 실행하고자하지만, 1) 값을 전달하는 방법을 모른다. 그리고 2) __getattr__에서 돌아 오면 그 값은 두 번째 파싱을 시도합니다. np.ndarray(1)의 방법에

다음
import numpy as np 

class MyObject(): 

    def __getattr__(self, item): 
     def wrapper(*args, **kwargs): 
      func = getattr(np.ndarray(1), item) 
      result = func(*args, **kwargs) 
      if isinstance(result, np.ndarray): 
       return result * 2 
      return result 
     return wrapper 

wrapper 대표 수신 전화를하고, 적절한 반환 result을 처리

+0

init 메소드는 아무 것도하지 않고 완전히 무의미합니다. 그것을 제거해야합니다. –

답변

0

당신은 예를 들어, 포장 방법을 반환 할 수 있습니다.

+0

이것이 완벽하게 작동하는 것 같습니다. 감사합니다! –