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__$。
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기