728x90
반응형
- 개요
2차원 좌표계의 벡터의 기능을 수행하는 클래스를 생성한다
해당 클래스의 기능은 매직 메서드로 정의하고 구성은 다음과 같다
- 벡터의 합
- 스칼라 곱
- 벡터의 원점 여부 판단
- 클래스의 구성
class Vector(object):
def __init__(self, *arg):
'''
Create Instance with this format : Vector(x, y)
'''
if len(arg) <= 0:
self._x, self._y = 0, 0
else:
self._x, self._y = arg
def __repr__(self):
'''
return Info about Vector class
'''
return f"Vector({self._x}, {self._y})"
# 벡터의 합
def __add__(self, other):
return Vector(self._x + other._x, self._y + other._y)
# 스칼라곱
def __mul__(self, num):
return Vector(self._x * num, self._y * num)
# 벡터의 원점 여부 확인
def __bool__(self):
return bool(max(self._x, self._y) or min(self._x, self._y))
Vector 클래스를 위와 같이 정의하였다
- __init__ 메서드 : 패킹을 통해 인자로 받은 값을 하나로 뭉쳐서 사용
- 이때 패킹된 길이가 0 이하라면 인자가 없다는 의미이므로, (0, 0)으로 X와 Y의 값을 설정
- 그렇지 않은 경우 패킹된 값을 통해 X와 Y의 값을 설정
- __repr__ 메서드 : Vector 클래스의 인스턴스가 가진 프로퍼티 값을 출력
- __add__ 메서드 : 벡터의 합 수행
- __mul__ 메서드 : 스칼라 곱 수행
- __bool__ 메서드 : 원점 벡터를 의미하는지 판단
- 파이썬에서 0은 False를 의미함
- max 값이나 min 값 둘 중 하나라도 False가 아니라는것은 원점이 아님을 의미함
- 따라서 값이 False라면 원점, True라면 원점이 아님을 의미함
- 클래스의 사용
...
v1 = Vector(5, 4)
v2 = Vector(6, 3)
v3 = Vector()
v4 = Vector(-3, 0)
v5 = Vector(0, -5)
v6 = Vector(3, 3)
# 벡터의 연산
print(v1 + v2)
print(v2 * 3)
# __init__ 메서드 확인
print(v3)
# 벡터의 원점 여부 확인
print(bool(v3))
print(bool(v4))
print(bool(v5))
print(bool(v6))
위와 같이 6개의 Vector 클래스의 인스턴스를 생성하였다
실행한 결과는 다음과 같다

위와 같이 결과가 출력된 것을 확인할 수 있다
728x90
반응형
'Python > 파이썬 심화' 카테고리의 다른 글
| 네임드 튜플 (2) (0) | 2025.08.04 |
|---|---|
| 네임드 튜플 (1) (0) | 2025.08.04 |
| 매직 메서드 (2) (0) | 2025.07.29 |
| 매직 메서드 (1) (0) | 2025.07.29 |
| 클래스 & 메서드 (4) (0) | 2025.07.28 |