Python 진급 학습 의 특수 한 방법 실례 상세 분석
최근 python 을 공부 하면 서 이전에 접 하지 못 했 던 특별한 방법 을 배 웠 습 니 다.
특수 한 방법 은 무엇 입 니까?우리 가 클래스 를 설계 할 때 python 에서 초기 화 하 는 방법 이 있 습 니 다$init__$,자바 의 구조 기 와 유사 하 다.이것 이 바로 특수 한 방법 이 고 마술 방법 이 라 고도 부른다.쉽게 말 하면 특수 한 방법 은 디자인 의 유형 에 신기 한 특성 을 더 할 수 있다.예 를 들 어 python 원생 의 절편 작업,교체,연승 작업 등 을 할 수 있다.python 에서 특수 한 방법 은 두 밑줄 로 시작 하여 두 밑줄 로 끝 냅 니 다.
하나의 큰 예
수학 에 서 는 벡터 라 는 개념 이 있 지만 python 의 데이터 형식 은 없다.우 리 는 python 으로 그것 을 실현 할 방법 을 강구 했다.
먼저 벡터 는 일반적인 데이터 유형 과 달리 전통 적 인 수 는 직접 연산 할 수 있 고 벡터 는 서로 다른 좌 표를 각각 연산 해 야 한다.자,해 봐.
우선 클래스 를 정의 하여 초기 화 방법 을 실현 합 니 다.
#
class Vector:
def __init__(self, x=0, y=0):
self.x = x
self.y = y
어떻게 벡터 의 덧셈 을 실현 합 니까?2 차원 벡터 에서 벡터 의 덧셈 은 모든 좌 표를 각각 더 한 결과 이다.python 에$ 가 있 습 니 다.add__$방법
class Vector:
def __init__(self, x=0, y=0):
self.x = x
self.y = y
#
def __add__(self, other):
x = self.x + other.x
y = self.y + other.y
return Vector(x, y)
우 리 는 x 와 y 변 수 를 각각 추가 한 후에 Vector 로 돌아 갑 니 다.python 에서 문자열 을 직접 덧셈 으로 연결 할 수 있 는 원 리 는 바로 여기에 있 습 니 다.python 은 문자열 에 대한 add 방법 을 실현 합 니 다.덧셈,곱셈 의 이 치 를 실현 한 것 처럼 각 좌 표를 단독으로 곱 하면 된다.
class Vector:
def __init__(self, x=0, y=0):
self.x = x
self.y = y
#
def __add__(self, other):
x = self.x + other.x
y = self.y + other.y
return Vector(x, y)
# , r*3
def __mul__(self, scalar):
return Vector(self.x*scalar, self.y*scalar)
우리 가 벡터 연산 을 할 때 자주 사용 하 는 조작 은 벡터 를 구 하 는 모델 이 있 습 니 다.우 리 는$ 를 사용 합 니 다.abs__$특수 한 방법 으로 이 루어 집 니 다.abs 는 보통 하나의 수의 절대 치 를 구 하 는 데 사용 되 고 벡터 가 사용 되 지 않 으 며 모델 을 구 하 는 데 적당 합 니 다.math 모듈 의 hypot 방법 으로$\sqrt(x^2+y^2)$를 계산 합 니 다.
class Vector:
def __init__(self, x=0, y=0):
self.x = x
self.y = y
# , 0, false
def __bool__(self):
return bool(abs(self))
#
def __add__(self, other):
x = self.x + other.x
y = self.y + other.y
return Vector(x, y)
# , r*3
def __mul__(self, scalar):
return Vector(self.x*scalar, self.y*scalar)
#
# hypot() sqrt(x*x + y*y)
def __abs__(self):
return hypot(self.x, self.y)
예 를 들 어 실행 하 다.
v = Vector(2, 3)
print(v)
v2 = Vector(4, 5)
print(v+v2)
print(v+v2*2)
<__main__.Vector object at 0x000002B4B1843C50>
<__main__.Vector object at 0x000002B4B1843EF0>
<__main__.Vector object at 0x000002B4B1843898>
실행 할 수 있 습 니 다.정확 한 것 같 지만 출력 결과 가 이상 합 니 다.어 떡 하지?python 중 개$repr__$특수 한 방법 으로 콘 솔 출력 스타일 을 수정 할 수 있 습 니 다.
class Vector:
def __init__(self, x=0, y=0):
self.x = x
self.y = y
# , 0, false
def __bool__(self):
return bool(abs(self))
#
def __add__(self, other):
x = self.x + other.x
y = self.y + other.y
return Vector(x, y)
# , r*3
def __mul__(self, scalar):
return Vector(self.x*scalar, self.y*scalar)
#
# hypot() sqrt(x*x + y*y)
def __abs__(self):
return hypot(self.x, self.y)
# __repr__ , Vector(1, 2)
# __str__, str()
def __repr__(self):
return 'Vector(%r, %r)' % (self.x, self.y)
$ 실현repr__$방법,우 리 는 콘 솔 에서 Vector(x,y)를 출력 할 수 있 습 니 다.이에 대응 하 는 개$str__$방법 은 str()를 사용 하여 해당 문자열 을 되 돌려 사용자 에 게 보 여 줍 니 다.이전 프로그램 이 실 행 된 결 과 를 살 펴 보 겠 습 니 다.
v = Vector(2, 3)
print(v)
v2 = Vector(4, 5)
print(v+v2)
print(v+v2*2)
print(abs(v))
Vector(2, 3)
Vector(6, 8)
Vector(10, 13)
3.605551275463989
효과 가 좋다.특수 한 방법 을 통 해 사용자 정의 형식 은 내 장 된 형식 과 마찬가지 로 python 스타일 의 코드 를 쓸 수 있 습 니 다.
위 에서 말 한 몇 가지 특수 한 방법 을 제외 하고 python 은 80 여 개의 특수 한 방법 이 있 습 니 다.예 를 들 어$len__$방법 은 길 이 를 구 하 는 데 사용 할 수 있 습 니 다.$getitem__$haha[2]와 같은 조작 으로 슬라이스 와 교체 등 을 할 수 있 고 똑 같은 것 은$setitem__$。
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.