2012-12-27 2 views
1

У меня есть класс:Python класса Instance Арифметика

class Foo: 
    def __init__(self, a, b): 
     self.a = a 
     self.b = b 

Где a с плавающей точкой и b является кортеж, содержащий позицию в декартовой системе координат.

Скажем, a = Foo(1.23, (1, 2)).

То, что я хочу сделать, это сделать так, что если мы делаем a + 4.56 или 7.89 - a или что-то, что он оценивает a быть поплавок объект (a.a).

Я знаю, что могу просто добавить встроенные методы, такие как __add__ и __sub__, но есть ли более простой способ? Как в одном, который обеспечивает функциональность одним способом?

+2

Я так не считаю. В противном случае мы можем сделать 'Foo()' + 'Bar()' = 'Egg()'. Питон - это волшебство. Есть ручная работа. '+' не перегружен, поэтому он сохранит свою стандартную функциональность. – CppLearner

ответ

4

Если a должен быть поплавком, тогда я бы рекомендовал принудительно его поплавок.

float(a) + 4.56 
+6

Для этого нужно определить '__float__'. Но все же явные преобразования хороши. – delnan

+0

Ах, после повторного чтения вопроса я неправильно прочитал его в первый раз. –

+1

@SeanLinehan: было бы полезно читателям, если бы вы добавили определение для метода 'float', потому что без него' float (a) 'вызывает исключение. – Rodrigue

Смежные вопросы