2012-05-15 2 views
1

Мне нужно переопределить поведение каретки в классе, но я не уверен, какая операционная перегрузка применима к нему. Например:Как вы перегружаете оператор каретки (^) в python

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

print A(1)^A(2) 

Этот код ошибки с:

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

Как я могу построить класс, так что я могу контролировать поведение?

+3

RTFD http://docs.python.org/reference/datamodel.html#emulating-numeric-types –

+0

Я вижу, что вы используете Python 2. Вы должны всегда использовать 'класса A (объект): 'вместо' class A: '. Старые классы никогда не должны использоваться. –

+0

Почему это? Каковы недостатки не наследования объекта? – ninhenzo64

ответ

2

^является оператором xor. Вы можете перегрузить его с помощью метода __xor__.

Например

>>> class One: 
...  def __xor__(self, other): 
...    return 1^other 
... 
>>> o = One() 
>>> o^1 
0 
>>> o^0 
1 
Смежные вопросы