Я не думаю, что вы понимаете объектно-ориентированный подход в этом python коде. Ключевое слово self используется для доступа к базовому объекту, все атрибуты которого должны быть определены в функции init класса. Эти атрибуты должны присутствовать только для представления состояния экземпляра класса. Смотрите эту ссылку: ссылка
Вы всегда должны быть осторожны при изменении объектов путем прямого доступа к атрибутам. Обычной практикой является доступ к ним только через геттеры и сеттеры, например,
def getAttribute_1(self):
return self.attribute_1
. Существует множество хороших книг и учебных пособий по объектно-ориентированному программированию, если вы хотите узнать о них больше, просто зайдите в Google.
В этом случае, например, я не понимаю, почему вы делаете: for self.r in result: ...
, когда вы должны позволить go исключить ключевое слово self: for r in result: ...
Поскольку эта переменная результата актуальна только в области действия ваша функция.
Кроме того, если вы хотите установить атрибут цены вашего текущего объекта, вы должны определить этот атрибут в функции init :
def __init__(self, ...)
self.price = 0 """or whatever default value
you want to give it, or initiate it by giving the initial
value as an argument for the constructor"""
возможно определите метод получения и установки следующим образом:
def get_price(self):
return self.price
def set_price(self, new_price):
self.price = new_price
Затем используйте эти методы в вашей функции ajax. Просто не забудьте провести различие между локальными переменными, например price = result[4]
, которые имеют отношение только к этой функции, и атрибутами вашего объекта, такими как self.price
! Это два совершенно разных понятия.
Чтобы ответить на вашу ошибку в этом примере: get_price не устанавливается, если результаты, возвращаемые запросом, равны None, и в этом случае l oop не будет введено. В этом случае атрибут self.get_price вашего объекта никогда не создавался, поэтому возникает ошибка.
Надеюсь, это поможет