Неразрешенная ошибка атрибута в PyCharm

Я создал класс python, например, например:

class A():

    def foo(self):
        #Does something

def bar(self):
    #Does some work

A.bar = bar

Насколько я понимаю, это должно добавить бар к классу. Но когда я делаю это в другом классе, я получаю указанную ошибку

global a

a=A()

a.bar() # this gives the error

Спасибо.


person Vivek Shankar    schedule 17.03.2017    source источник
comment
Я знаю, что вы можете сделать это с объектом, но и с классом тоже? Я не слишком уверен в этом.   -  person dabadaba    schedule 17.03.2017
comment
@dabadaba Извините за поздний ответ, видимо, это можно сделать, см. этот ТАК вопрос и этот учебник, который я просматриваю. Также я запустил и проверил код с экземпляром в том же классе.   -  person Vivek Shankar    schedule 17.03.2017
comment
но это другое, потому что метод с таким именем уже существует. Очевидно, вы не можете просто назначить bar (с новым поведением, определенным во внешней функции) на A, если оно не определено.   -  person dabadaba    schedule 17.03.2017
comment
@dabadaba Я считаю, что именно для этого и делается обезьянье исправление, также, как я сказал в своем предыдущем комментарии, код не выдает ошибку, если все хранится в одном файле.   -  person Vivek Shankar    schedule 18.03.2017


Ответы (1)


Ваша функция бара находится вне класса. Исправь это:

class A():

    def foo(self):
        print('foo')

    def bar(self):
        print('bar')

global a
a = A()
a.bar()
person Manpreet Ahluwalia    schedule 17.03.2017
comment
весь смысл того, что делает OP, состоит в том, чтобы назначить функцию, которая изначально не назначена классу, этому классу - person dabadaba; 17.03.2017
comment
Да, как сказал @dabadaba, мне нужно, чтобы экземпляр и вызов находились в другом классе. - person Vivek Shankar; 17.03.2017
comment
Этот код отлично работает в моей системе. Нет неразрешенной ошибки атрибута, и он добавляет метод в класс, используя A.bar = bar - person Manpreet Ahluwalia; 19.03.2017