객체 표현을 생성하기 위해 사용하는 여러 메서드의 예를 살펴보기 위해 Vector2d 클래스를 사용하므로 클래스를 계속 확장해나간다.
#다양하게 표현되는 Vector2d 객체
v1 = Vector2d(3,4)
print(v1.x, v1.y)
x,y = v1
x,y
v1
v1_clone = eval(repr(v1))
v1 == v1_clone
print(v1)
octets = bytes(v1)
octets
abs(v1)
bool(v1), bool(Vector2d(0,0))
Vec/tor2d 클래스는 vector2d_vo.py에 구현되어 있지만 비교를 위해 사용하는 ==연산자를 제외한 중위 연산자는 구현된다.
현재 Vector2d는 잘 설계된 객체에서 파이썬 개발자가 기대하는 연산을 제공하기 위해서 여러 특별 메서드를 구현하고 있다.
from array import array
import math
class Vector2d:
typecode = 'd'
def __init__(self,x,y):
self.x = float(x)
self.y = float(y)
def __iter__(self):
return (i for i in (self.x, self.y))
def __repr__(self):
class_name = type(self).__name__
return '{}({!r}, {!r})'.format(class_name, *self)
def __str__(self):
return str(tuple(self))
def __bytes__(self):
return (bytes([ord(self.typecode)]) +
bytes(array(self.typecode, self)))
def __eq__(self, other):
return tuple(self) == tuple(other)
def __abs__(self):
return math.hypot(self.x, self.y)
def __bool__(self):
return bool(abs(self))