2012-11-22 5 views
1

h5py의 HDF 데이터 세트는 numpy 배열 기능의 하위 세트를 구현하지만 실제로 액세스하는 데이터 만 메모리로 읽어 들일 수 있다는 이점이 있습니다. 그러므로 가능한 한 오랫동안 데이터 세트로 작업하고 부족한 기능이 필요할 때만 배열로 변환하려고합니다. 이를 위해 처음에는 데이터 셋을 포함하는 래퍼 클래스를 정의하려고 시도했지만 이름 오류를 포착하고 데이터 셋을 배열로 변환합니다. 내 현재의 구현은 다음과 같습니다파이썬에서 전달 속성 조회

class DArr: 
    def __init__(self, dset): 
     self.arr = dset 
    def __getitem__(self, args): 
     try: 
      return self.arr.__getitem__(args) 
     except: 
      self.arr = np.array(self.arr) 
      return self.arr.__getitem__(args) 
    def __getattr__(self, name): 
     try: 
      return self.arr.__getattr__(name) 
     except: 
      self.arr = np.array(self.arr) 
      return self.arr.__getattr__(name) 

그러나 이것은이 분명히 내가 앞으로 할 수있는 __getattr__을 가지고 있지 않는 한 self.arr가하는 numpy.array 될 때 실패합니다. 이런 종류의 포워딩을 수행하는 올바른 방법은 무엇입니까? 목표는 DArr이 사용자의 관점에서 numpy.array처럼 동작해야한다는 것입니다.

답변

2

사용 getattr 내장 기능 : 그게 내가 :) 필요 단지 무엇을,

def __getitem__(self, args): 
    try: 
     return self.arr[args] 
    except: 
     self.arr = np.array(self.arr) 
     return self.arr[args] 
+0

감사 : __getitem__를 들어

def __getattr__(self, name): try: return getattr(self.arr, name) except: self.arr = np.array(self.arr) return getattr(self.arr, name) 

[] 색인 연산자를 사용 – amaurea

관련 문제