Python 확장 내장 유형 방법 분석
간단 한 소개
새로운 유형의 대상 방식 을 실현 하 는 것 을 제외 하고,때때로 우 리 는 Python 내장 형식 을 확장 함으로써 목록 에 대기 열의 삽입 과 삭제 방법 을 추가 하 는 등 다른 유형의 데이터 구 조 를 지원 할 수 있다.본 고 는 이 문제 에 대해 집합 기능 을 실현 하 는 실례 를 결합 하여 Python 내장 유형 을 확장 하 는 두 가지 방법 을 소개 했다.내장 유형 을 삽입 하여 유형 을 확장 하고 하위 클래스 를 통 해 유형 을 확장 하 는 것 이다.
내장 형식 확장
다음 예 는 list 대상 을 끼 워 넣 는 형식 으로 집합 대상 을 실현 하고 연산 자 를 추가 하여 다시 불 러 옵 니 다.이러한 지식 은 Python 의 목록 과 부가 적 인 집합 연산 을 포장 했다.
class Set:
def __init__(self, value=[]): # Constructor
self.data = [] # Manages a list
self.concat(value)
def intersect(self, other): # other is any sequence
res = [] # self is the subject
for x in self.data:
if x in other: # Pick common items
res.append(x)
return Set(res) # Return a new Set
def union(self, other): # other is any sequence
res = self.data[:] # Copy of my list
for x in other: # Add items in other
if not x in res:
res.append(x)
return Set(res)
def concat(self, value): # value: list, Set...
for x in value: # Removes duplicates
if not x in self.data:
self.data.append(x)
def __len__(self): return len(self.data) # len(self)
def __getitem__(self, key): return self.data[key] # self[i]
def __and__(self, other): return self.intersect(other) # self & other
def __or__(self, other): return self.union(other) # self | other
def __repr__(self): return 'Set:' + repr(self.data) # print()
if __name__ == '__main__':
x = Set([1, 3, 5, 7])
print(x.union(Set([1, 4, 7]))) # prints Set:[1, 3, 5, 7, 4]
print(x | Set([1, 4, 6])) # prints Set:[1, 3, 5, 7, 4, 6]
하위 클래스 로 형식 확장Python 2.2 부터 모든 내 장 된 형식 은 list,str,dict,tuple 과 같은 하위 클래스 를 직접 만 들 수 있 습 니 다.이렇게 하면 사용자 가 정의 하 는 class 문 구 를 통 해 내 장 된 유형 을 맞 춤 형 으로 만 들 거나 확장 할 수 있 습 니 다.유형 이름 의 하위 클래스 를 만 들 고 맞 춤 형 으로 만 들 수 있 습 니 다.형식의 하위 형식 인 스 턴 스 는 원본 내 장 된 형식 이 나타 날 수 있 는 모든 곳 에 사용 할 수 있 습 니 다.
class Set(list):
def __init__(self, value = []): # Constructor
list.__init__([]) # Customizes list
self.concat(value) # Copies mutable defaults
def intersect(self, other): # other is any sequence
res = [] # self is the subject
for x in self:
if x in other: # Pick common items
res.append(x)
return Set(res) # Return a new Set
def union(self, other): # other is any sequence
res = Set(self) # Copy me and my list
res.concat(other)
return res
def concat(self, value): # value: list, Set . . .
for x in value: # Removes duplicates
if not x in self:
self.append(x)
def __and__(self, other): return self.intersect(other)
def __or__(self, other): return self.union(other)
def __repr__(self): return 'Set:' + list.__repr__(self)
if __name__ == '__main__':
x = Set([1,3,5,7])
y = Set([2,1,4,5,6])
print(x, y, len(x))
print(x.intersect(y), y.union(x))
print(x & y, x | y)
x.reverse(); print(x)
파 이 썬 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.본 논문 에서 말 한 것 이 여러분 의 Python 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.