v1 = Vector([1,2,3])
v1 * 10
#Vector([10.0,20.0,30.0])
Vector 피연산자를 이용해서 곱하는 또 다른 방법은 두 벡터의 내적을 구하는 스칼라곱으로 Numpy및 이와 유사한 라이브러리에서는 * 연산자를 사용하는 경우, 벡터의 각 항목에 값을 곱하며, 벡터의 스칼라곱을 구하기 위해서 numpy.dot()함수를 사용한다.
#Vector 클래스 내부
def __mul__(self, scalar):
return Vector(n * scalar for n in self)
def __rmul__(self, scalar):
return self * scalar
scalar의 자료형을 검사하기 위해서 isinstance() 함수를 사용하지만, 구체적인 자료형으로 하드코딩하는 대신 numbers.Real ABC로 검사하며, numbers.Real은 이 메서드에 필요한 자료형을 모두 포함할 뿐만 아니라 향후에 numbers.Real ABC의 실제 서브클래스나 가상 서브클래스로 선언된 수치형 자료도 모두 포함한다.
#vector_v7.py * 연산자 메서드 추가
from array import array
import reprlib
import math
import functools
import operator
import itertools
import numbers
class Vector:
typecode = 'd'
def __init__(self, components):
self._components = array(self.typecode, components)
def __mul__(self, scalar):
if isinstance(scalar, numbers.Real):
return Vector(n*scalar for n in self)
else:
return NotImplemented
def __rmul__(self, scalar):
return self * scalar