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__
특정한 비교
X
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()방법 으로 대상 을 교체 할 수도 있다.읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.