2013-07-10 3 views
3

Я довольно новичок в Python и программировании в целом, поэтому извините недостаток «fu». :)Нужна помощь по логике этого кода

У меня возникли проблемы с пониманием этого класса вызова:

сниппета

class bar: 
    def __init__(self, a): 
     self.a = a 
    def __add__(self, b): 
     s = self.a + b.a 
     return s 

конец фрагмента кода

Так, от переводчика, если я выдаю:

x = bar(10) 
y = bar(20) 
z = x + y 
print(z) 

Я получаю «30» назад. Правильно.

Я вижу, как создается self.a, но я не понимаю, как создается b.a для добавления.

Любые рекомендации приветствуются.

ответ

5

Когда вы звоните x + y это на самом деле переводится на:

x.__add__(y) 

Таким образом, этот метод называется:

__add__(self, b) # __add__(x, y) 

Какие результаты в:

s = x.a + y.a  # 30 
return 30 
+0

Спасибо! Это в сочетании с двумя другими ответами ниже помогло много. – Ryan

+0

Добро пожаловать :) – mishik

+0

У меня есть небольшой вопрос. Для 'x .__ add __ (y)' кажется, что вызывается только 'x'' __add__', но на самом деле вызываются как 'x',' y'. @mishik – zhangyangyu

4

В этом коде, ba не создается, к нему обращаются. Вы в основном передаете y как аргумент b, у которого уже есть связанный с ним атрибут a, поскольку он является объектом типа bar. Если вы хотите перейти на свой код, перейдите по ссылке http://www.pythontutor.com

+0

+1, Ваше первое предложение - единственный ответ, который мне нужен. – dansalmo

+0

Слейтер - спасибо, мне не хватало +, являющегося призывом к __add__ моему второму аргументу. Это было отличное объяснение. – Ryan

+0

Всегда рад помочь. –

1

x = bar(a) создает объект класса bar со значением 'a'. Каждый объект bar имеет свойство/переменную с именем a.

В x + y функция add из x вызывается с использованием y в качестве параметра.

So b = y, что означает b.a = y.a = 20.

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