Почему 2.__add__(3) не работает в Python?

#python #class

#python #методы #int #синтаксическая ошибка

Вопрос:

Целое число 2 имеет __add__ метод:

 >>> "__add__" in dir(2)
True
  

… но его вызов вызывает ошибку синтаксиса:

 >>> 2.__add__(3)
  File "<stdin>", line 1
    2.__add__(3)
            ^
SyntaxError: invalid syntax
  

Почему я не могу использовать __add__ метод?

Комментарии:

1. Варианты этой темы являются относительно распространенными вопросами здесь. Это довольно интересно, хотя я действительно не вижу причин, по которым вы хотели бы сделать это вместо просто 2 3 .

2. @mgilson: (2).__add__ мог бы служить функцией «добавить по два» вместо lambda x: x 2 .

3. @unutbu — Интересно. Я полагаю, это было бы умно (менее легко для чтения?) способ сделать это… Хотя это хороший момент. Я полагаю, что я буду искать это в будущем!

4. @unutbu: Я бы предпочел использовать functools.partial(operator.add, 2) .

5. @MartijnPieters: На каком основании вы делаете этот выбор?

Ответ №1:

2. анализируется как значение с плавающей точкой, поэтому 2.__add__ это ошибка синтаксиса.

Вы можете оценить

(2).__add__(3) вместо этого.


 In [254]: (2).__add__(3)
Out[254]: 5
  

Ответ №2:

Другой способ обойти 2. разбор с плавающей точкой — вставить пробел между 2 и .

 >>> 2 .__add__(3)
5