Python 확장 내장 유형 방법 분석

3540 단어 Python넓히다
이 글 의 실례 는 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 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기