Python 연산 자 다시 불 러 오기 상세 설명 및 인 스 턴 스 코드

Python 연산 자 다시 불 러 오기
      Python 언어 는 연산 자 를 다시 불 러 오 는 기능 을 제공 하고 언어의 유연성 을 강화 한 다 는 점 에서 C+와 유사 하면 서도 약간 다르다.그것 의 특수성 을 감안 하여 오늘 은 Python 연산 자 를 다시 싣 는 것 에 대해 토론 합 니 다.
      Python 언어 자 체 는 많은 마법 방법 을 제공 합 니 다.연산 자 를 다시 불 러 오 는 것 은 이 Python 내 장 된 마법 방법 을 다시 쓰 는 것 을 통 해 이 루어 집 니 다.이 마법 방법 들 은 모두 쌍 밑줄 로 시작 하고 끝 나 는 것 으로 와 유사 하 다.X__python 은 이러한 특수 한 명명 방식 을 통 해 조작 자 를 차단 하여 재 부팅 을 실현 합 니 다.Python 의 내장 작업 이 클래스 대상 에 사 용 될 때 Python 은 대상 에서 지정 한 방법 을 검색 하고 호출 합 니 다.
       클래스 는 가감 연산,인쇄,함수 호출,색인 등 내장 연산 을 다시 불 러 올 수 있 습 니 다.연산 자 는 우리 의 대상 을 내 장 된 대상 과 똑 같이 다시 불 러 올 수 있 습 니 다.Python 은 연산 자 를 호출 할 때 이러한 방법 을 자동 으로 호출 합 니 다.예 를 들 어 클래스 가 를 실현 하면add__방법,클래스 의 대상 이+연산 자 에 나타 날 때 이 방법 을 사용 합 니 다.
일반적인 연산 자 재 업로드 방법
방법
적재량 설명
연산 자 호출 방식
__init__
구조 함수
대상 생 성:X=Class(args)
__del__
분석 함수
X 개체 회수
__add__/__sub__
가감 연산
 X+Y, X+=Y/X-Y, X-=Y
__or__
연산 자|
X|Y, X|=Y
_repr__/__str__
인쇄/변환
print(X)、repr(X)/str(X)
__call__
함수 호출
X(*args, **kwargs)
__getattr__
속성 참조
X.undefined
__setattr__
속성 할당
X.any=value
__delattr__
속성 삭제
del X.any
__getattribute__
속성 획득
X.any
__getitem__
색인 연산
X[key],X[i:j]
__setitem__
인덱스 할당
X[key],X[i:j]=sequence
__delitem__
인덱스 와 블록 삭제
del X[key],del X[i:j]
__len__
길이
len(X)
__bool__
불 테스트
bool(X)
__lt__, __gt__, 
__le__, __ge__, 
__eq__, __ne__
특정한 비교
XY,X<=Y,X>=Y 순 으로 
X==Y,X!=Y 
주석:(lt:less than,lt:greater than, 
  le: less equal, ge: greater equal, 
  eq: equal, ne: not equal 

__radd__
오른쪽 덧셈
other+X
__iadd__
실지 덧셈
X+=Y(or else __add__)
__iter__, __next__
번복
I=iter(X), next()
__contains__
멤버 관계 테스트
item in X(X 는 모든 교체 대상)
__index__
정수 값
hex(X), bin(X),  oct(X)
__enter__, __exit__
환경 관리자
with obj as var:
__get__, __set__, 
__delete__
설명자 속성
X.attr, X.attr=value, del X.attr
__new__
창설
재init__이전 생 성 대상
   다음은 자주 사용 하 는 연산 자 방법의 사용 에 대해 소개 한다.
구조 함수 와 분석 함수:init__와del__
       이들 의 주요 역할 은 대상 의 생 성 과 회수 입 니 다.인 스 턴 스 를 만 들 때 를 호출 합 니 다.init__구조 방법.인 스 턴 스 대상 이 회수 되 었 을 때 석조 함수del__자동 으로 실 행 됩 니 다.

>>> class Human(): 
...   def __init__(self, n): 
...     self.name = n 
...       print("__init__ ",self.name) 
...   def __del__(self): 
...     print("__del__") 
...  
>>> h = Human('Tim') 
__init__ Tim 
>>> h = 'a' 
__del__ 
가감 연산:add__와sub__
       이 두 가지 방법 을 다시 불 러 오 면 일반적인 대상 에+연산 자 를 추가 할 수 있 습 니 다.다음 코드 는+연산 자 를 어떻게 사용 하 는 지 보 여 줍 니 다.코드 에 있 는 를sub__방법 을 없 애고 감호 연산 자 를 다시 호출 하면 오류 가 발생 할 수 있다.

>>> class Computation(): 
...   def __init__(self,value): 
...     self.value = value 
...   def __add__(self,other): 
...     return self.value + other 
...   def __sub__(self,other): 
...     return self.value - other 
...  
>>> c = Computation(5) 
>>> c + 5 
10 
>>> c - 3 
2 
대상 의 문자열 표현 형식:repr__와str__
       이 두 가지 방법 은 대상 을 나타 내 는 문자열 표현 형식 입 니 다.print(),str()방법 은 로 호출 됩 니 다.str__방법,print(),str(),repr()방법 은 를 호출 합 니 다.repr__방법아래 의 예 를 통 해 알 수 있 듯 이 두 가지 방법 이 동시에 정 의 될 때 Python 은 를 우선 검색 하고 호출 합 니 다.str__방법

>>> class Str(object): 
...   def __str__(self): 
...     return "__str__ called"   
...   def __repr__(self): 
...     return "__repr__ called" 
...  
>>> s = Str() 
>>> print(s) 
__str__ called 
>>> repr(s) 
'__repr__ called' 
>>> str(s) 
'__str__ called' 
인덱스 값 과 할당:getitem__, __setitem__
       이 두 가지 방법 을 실현 함으로써 X[i]와 같은 형식 으로 대상 에 대해 수치 와 대 가 를 할 수 있 고 대상 에 대해 절편 작업 을 할 수 있다.

>>> class Indexer: 
  data = [1,2,3,4,5,6] 
  def __getitem__(self,index): 
    return self.data[index] 
  def __setitem__(self,k,v): 
    self.data[k] = v 
    print(self.data) 
>>> i = Indexer() 
>>> i[0] 
1 
>>> i[1:4] 
[2, 3, 4] 
>>> i[0]=10 
[10, 2, 3, 4, 5, 6] 
설정 및 접근 속성:getattr__、__setattr__
       우 리 는 무 거 운 짐 을 통 해getattr__와setattr__대상 구성원 에 대한 접근 을 차단 합 니 다.getattr__방문 대상 에 존재 하지 않 는 멤버 는 자동 으로 호출 됩 니 다.setattr__방법 은 대상 구성원 을 초기 화 할 때 호출 합 니 다.즉,설정dict__의 item 시 호출setattr__방법구체 적 인 예 는 다음 과 같다.

class A(): 
  def __init__(self,ax,bx): 
    self.a = ax 
    self.b = bx 
  def f(self): 
    print (self.__dict__) 
  def __getattr__(self,name): 
    print ("__getattr__") 
  def __setattr__(self,name,value): 
    print ("__setattr__") 
    self.__dict__[name] = value 
 
a = A(1,2) 
a.f() 
a.x 
a.x = 3 
a.f() 
     위의 코드 의 운행 결 과 는 다음 과 같 습 니 다.결 과 를 통 해 알 수 있 듯 이 존재 하지 않 는 변수 x 에 접근 할 때 를 호출 합 니 다.getattr__방법당init__호출 될 때 할당 연산 도 호출setattr__방법

__setattr__ 
__setattr__ 
{'a': 1, 'b': 2} 
__getattr__ 
__setattr__ 
{'a': 1, 'x': 3, 'b': 2} 
교체 기 대상:iter__,  __next__
       Python 의 교체,직접 과부하getitem__방법 으로 실현 하고 아래 의 예 를 보 세 요.

>>> class Indexer: 
...   data = [1,2,3,4,5,6] 
...   def __getitem__(self,index): 
...       return self.data[index] 
...  
>>> x = Indexer() 
>>> for item in x: 
...   print(item) 
...  
1 
2 
3 
4 
5 
6 
      위의 방법 을 통 해 교 체 를 실현 할 수 있 지만 가장 좋 은 방법 은 아니다.Python 의 교체 작업 은 우선 호출 을 시도 합 니 다iter__방법,다시 시도getitem__。교체 환경 은 iter 를 통 해 찾 아 보기iter__방법 은 실현 되 고,이 방법 은 교체 기 대상 으로 돌아간다.이 방법 이 제공 되 었 다 면,Python 은 스 톱 Iteration 이상 이 발생 할 때 까지 교체 기 대상 의 next()방법 을 반복 적 으로 호출 합 니 다.찾 지 못 하면iter__,Python 에서 만 사용 시도getitem__메커니즘.다음은 교체 기의 예 를 살 펴 보 겠 습 니 다.

class Next(object): 
  def __init__(self, data=1): 
    self.data = data 
  def __iter__(self): 
    return self 
  def __next__(self): 
    print("__next__ called") 
    if self.data > 5: 
      raise StopIteration 
    else: 
      self.data += 1 
      return self.data 
for i in Next(3): 
  print(i) 
print("-----------") 
n = Next(3) 
i = iter(n) 
while True: 
  try: 
    print(next(i)) 
  except Exception as e: 
    break 
   프로그램의 실행 결 과 는 다음 과 같다.

__next__ called 
4 
__next__ called 
5 
__next__ called 
6 
__next__ called 
----------- 
__next__ called 
4 
__next__ called 
5 
__next__ called 
6 
__next__ called 
    가시 실현iter__와next__방법 후,for in 방식 으로 대상 을 교체 할 수도 있 고,iter()와 next()방법 으로 대상 을 교체 할 수도 있다.
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기