2012-05-15 3 views
1

클래스의 캐럿 동작을 재정의해야하지만 어떤 연산자 오버로드가 적용되는지 잘 모르겠습니다. 나는 동작을 제어 할 수 있도록어떻게 파이썬에서 캐럿 (^) 연산자를 오버로드합니까?

TypeError: unsupported operand type(s) for ^: 'instance' and 'instance' 

가 어떻게 클래스를 만들 수 있습니다와

class A: 
    def __init__(self, f): 
     self.f = f 
    def __caret__(self, other): 
     return self.f^other.f 

print A(1)^A(2) 

이 코드 오류 : 예를 들면?

+3

RTFD http://docs.python.org/reference/datamodel.html#emulating-numeric-types 난 당신이 당신은 항상 사용해야 파이썬 2를 사용하고 참조 –

+0

'클래스

A (객체) :'클래스 A :'대신. 구식 클래스는 절대로 사용해서는 안됩니다. –

+0

왜 이런가요? 객체로부터 상속받지 않는 단점은 무엇입니까? – ninhenzo64

답변

8

A.__xor__() 또는 A.__rxor__()을 정의하십시오.

+0

감사합니다. :) – ninhenzo64

2

^는 xor 연산자입니다. __xor__ 방법으로 오버로드 할 수 있습니다. 예를

>>> class One: 
...  def __xor__(self, other): 
...    return 1^other 
... 
>>> o = One() 
>>> o^1 
0 
>>> o^0 
1