Python/파이썬 심화

매직 메서드 (3)

monstro 2025. 8. 4. 19:53
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__ 메서드 : 원점 벡터를 의미하는지 판단
    • 파이썬에서 0False를 의미함
    • 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