728x90
반응형

* 본 포스팅은 주피터 노트북에서 실행하였다.

 

클래스와 특수 메소드

2차원 벡터를 표현하는 Vector2D라는 클래스를 구현하고 이 클래스를 통해서 특수 메소드의 필요성에 대해 살펴볼 것이다.

class Vector2D:
    def __init__(self,x,y):
        self._x=x
        self._y=y
    def __str__(self):
        return '({},{})'.format(self._x, self._y)
    def add(self, other):
        return Vector2D(self._x + other._x, self._y+other._y)
    

2차원 벡터를 표현하는 Vector2D라는 클래스를 구현하고 이 클래스를 통해서 특수 메소드의 필요성에 대해 살펴보자.

v1 = Vector2D(30,40)
v2 = Vector2D(110,20)
v3 = v1 + v2
print(v3)

 

  • 에러가 나타나는 이유는 클래스 내부에 어떤 방식으로 덧셈을 할지 그 방법을 서술해야 하기 때문이다.
  • add()라는 메소드를 정의하고 두 벡터의 x 성분과 y 성분을 더하고 이 성분값을 초기값으로 가지는 Vector2D를 반환하도록 하자
v3 = v1.add(v2)                 # Vector2D의 add() 메소드 사용
print('v1 + v2 = ',v3)

  • v1.add(v2)는 두 벡터의 합을 출력한다.
  • add() 메소드 대신에 +, - 와 같은 연산자를 사용하면 보다 편리하다.

 

class Vector2D:
    def __init__(self,x,y):
        self._x=x
        self._y=y
    def __str__(self):
        return '({},{})'.format(self._x, self._y)
    def add(self, other):
        return Vector2D(self._x + other._x, self._y+other._y)
    def __sub__(self,other):
        return Vector2D(self._x - other._x, self._y-other._y)
    def __mul__(self,other):
        return Vector2D(self._x * other._x, self._y*other._y)
v1 = Vector2D(30,40)
v2 = Vector2D(10,20)
v3 = v1.add(v2) #v1+v2도 가능
v4 = v1-v2
print(v3)
print(v4)

 

v1 = Vector2D(30,40)
v2 = Vector2D(10,20)
v5 = v1*v2
print(v5)


class Circle:
    PI=3.1415 #클래스 변수
    def __init__(self, name,radius):
        self._name=name
        self._radius = radius
    def area(self):
        return Circle.PI * self._radius**2
        
c1 = Circle('C1',4)
print('c1의 면적 ',c1.area())

 

c2 = Circle('C2',6)
print('c2의 면적 ',c2.area())

 

dictionary로 key값 보기

c1 = Circle('C1',4)
print('c1의 속성들 ',c1.__dict__)

 

print('c1의 name 변수값 ',c1.__dict__['_name'])

 

print('c1의 radius 변수값 ',c1.__dict__['_radius'])

728x90
반응형

+ Recent posts