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