2014-12-26 5 views
1

코드 :파이썬 - 벡터 수학 연산자 오버로딩

class Vector: 
    def __init__(self): 
     self.x = 0.0 
     self.y = 0.0 

    def __mul__(self, scalar): 
     v = Vector() 
     v.x = self.x * scalar 
     v.y = self.y * scalar 
     return v  


v = Vector() 
v.x = 2 
v.y = 5 
v = v * 2 

질문 :

v = 2 * v 

:이 가능하게하는 방식으로 MUL 연산자를 오버로드하는 방법이 있나요?

답변

3

사용 __rmul__ : 왼쪽 피연산자는 해당 작업 (__mul__)를 지원하지 않는 경우라고

def __rmul__(self, scalar): # self: right operand (Vector) 
    v = Vector() 
    v.x = self.x * scalar 
    v.y = self.y * scalar 
    return v  

__rmul__.

+0

여기 https://docs.python.org/2/library/operator.html에서 찾지 못했지만 https://docs.python.org/2/reference/datamodel.html 여기에서 확인하십시오. – maxest

+0

@maxest , 대답의 링크를 클릭 했습니까? (링크는 첫 줄에있는'__rmul__'에 있습니다). BTW, 나는'operator' 모듈에 대해서는 언급하지 않았습니다. – falsetru

+0

오, 내가 제공 한 링크를 놓친 것 같습니다. 다시 한번 감사드립니다 :) – maxest