2014-12-16 2 views
0

В следующем коде почему последняя строка выполнения дает ошибку? Должен ли оператор-точка в x.bf() передать экземпляр «x» функции bf (например, x.af())?В следующем коде, почему последняя строка выполнения дает ошибку?

class A: 
    a = 6 
    def af (self): 
     return "Hello-People" 

class B: 
    b = 7 
    def bf (self): 
     return "Bye-People" 

>>> x = A() 
>>> b = B() 
>>> x.bf = B.bf 
>>> x.bf() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: bf() missing 1 required positional argument: 'self' 
+0

Google Ваша ошибка. – Maroun

ответ

1

x.bf = B.bf - ваша ошибка, так как B - это класс, а не экземпляр объекта.

Вы не можете назначить x.bf непосредственно классу. Вам необходимо назначить x.bf экземпляру «b.bf» или создать экземпляр класса должным образом

т.е. Либо измените эту строку на:

# Where we instantiated class B and invoke bf via lazy loading (loading at the last possible minute) 
x.bf = B().bf 

или

# Use the existing instance of B and call bf 
x.bf = b.bf 

Больше информации:

  1. А и В являются ваши классы. Они ничего не делают, пока вы не создадите их.
  2. x и b - это экземпляры объектов. x является экземпляром A, а b является экземпляром B
  3. Всякий раз, когда вы создаете экземпляр класса, вам необходимо соответствовать его конструкторской сигнатуре. В этом случае классы не требуют дополнительных параметров, кроме self. Тем не менее, self только передается, если класс вызывается через();

    «х = A()» и «B = B()» соответствуют этой подписи

    Ошибка вы столкнулись в основном питон говорю вам, что вы назвали что-то, функцию или класс без прохождения в требуемая переменная.

+0

Не могли бы вы объяснить, почему это происходит более подробно. – user3260901

+0

Конечно. Дайте мне секунду для обновления сообщения – rurouni88

+0

Но в последней строке x.bf() x является переменной экземпляра. Так не должен ли он проходить сам по bf? – user3260901

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