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
반응형
'Language > Python' 카테고리의 다른 글
[Python/파이썬] Decorator (0) | 2021.06.04 |
---|---|
[Python/파이썬] 람다함수(lambda function) (0) | 2021.06.02 |
[Python/파이썬] 객체의 동일성(identity) (0) | 2021.06.02 |
[Python/파이썬] 클래스(class), 객체(object), 생성자, 메서드 만들기 (0) | 2021.06.02 |
[Python/파이썬] turtle 모듈 사용하기 (0) | 2021.06.02 |