벡터 클래스의 부활

매일 공부(ML)·2023년 1월 5일
0

Fluent Python

목록 보기
57/130

객체지향 상용구

파이썬스러운 객체

벡터 클래스의 부활

객체 표현을 생성하기 위해 사용하는 여러 메서드의 예를 살펴보기 위해 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))
profile
성장을 도울 아카이빙 블로그

0개의 댓글