파이썬 슬라이스 객체에 일부 메타 데이터를 포함하고 슬라이스의 각 요소 색인을 나타내는 변수를 추가하고 싶습니다. 메타 데이터는 조각이 검색중인 각 요소에 레이블을 지정하는 데 사용됩니다. 사용할 수있는 다른 레이블이 붙은 데이터 구조가 있다는 것을 알고 있습니다 만, 프로젝트 조각에는 numpy 배열에 대한 일종의 첨자로 미리 정의되어 있으며 여러 위치에서 다시 사용됩니다. 그래서, 나에게 이것은 이것을 통합하는 방법을 찾는 것이 합리적입니다.파이썬 슬라이스 객체 또는 하위 클래스를 모방 할 수 있습니까?
하위 분류는 slice
으로 생각했지만 명확하게 연결된 질문의 대답으로 명확하게 설명 된 subclassed이 될 수 없습니다. 그 이후로 어떤 것이 바뀌 었습니까?
sub = Subscript(0, 5, labels=['s0', 's1', 's2', 's3', 's4'])
list(range(10))[sub] # [0, 1, 2, 3, 4]
range(10)[sub.s0] # 0
없이 할 수있는 방법이있다 :
class Subscript:
def __init__(self, start, stop, step=None, labels=None):
self.labels = labels
self.slc = slice(start, stop, step)
for i, l in zip(range(start, stop, step), labels):
setattr(self, l, i)
과 같이 사용할 수 있습니다 : 내가하고 싶은 무엇
처럼 보이는 클래스를 만드는 것입니다 슬라이스를 반환하는 방법을 __call__
추가해야합니까? 어레이와리스트가 sub
에서 __getitem__
까지 걸리므로 어떻게해야할지 모르겠다. 나는이 정보를 slice
으로 원숭이 패치 할 수 있을지는 모르지만 이런 종류의 일이 수업에서 할 수 있는지 궁금해하고 있습니다.
현재, 내가 좋아하는 별도 슬라이스와 슬라이스 요소를 정의하고있다 :
sub = slice(0, 5)
s0, s1, s2, s3, s4 = range(5)
그러나이 방법은 더 힘들어 키 첨자 요소의 조합이 경우에 사전인가로 다차원 배열의 출력을 처리 할 수 있습니다 1 sub
이상이고 값은 1d 배열입니다.
속성을 동적으로 설정하는 데'exec'을 사용하지 마십시오. setattr이 훨씬 더 적합합니다. 또한'__init__'에는'self'가 없습니다. – vaultah
고마워! 그 중 하나를 잊어 버렸습니다 – pbreach