Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 17, 2022 15:55:11

Darudo_SandStorm
Зарегистрирован: 2022-01-17
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Пайтон не находит атрибут объекта

Здравствуйте, я новичок в Python и пытаюсь разобраться с классами. у меня есть код:
class Commodity():
def __init__(self, id, productCode, name, wholeasePrice, retailPrice):
self.__id = id
self.__productCode = productCode
self.__name = name
self.__wholeasePrice = wholeasePrice
self.__retailPrice = retailPrice

def setCom(self, id, productCode, name, wholeasePrice, retailPrice):
self.__id = id
self.__productCode = productCode
self.__name = name
self.__wholeasePrice = wholeasePrice
self.__retailPrice = retailPrice

def getCom(self):
return self.__id,
self.__productCode,
self.__name,
self.__wholeasePrice,
self.__retailPrice
def description(self):
print(f“{self.name} блаблабла”)


nCom=Commodity(1, 111, ‘cookie’, 300, 400)
print(nCom.getCom())
nCom.setCom(2, 222, ‘cookie’, 333, 444)
print(nCom.getCom())

print(f“наименование нового товара: {nCom.name}.”)
print(f“код нового товара: {nCom.productCode}.”)
print(f“id товара: {nCom.id}”)
print(f“оптовая цена: {nCom.wholeasePrice}”)
print(f“розничная цена: {nCom.retailPrice}”)

программа выполненея в Geany выдает ошибку как на первой картинке, программа выполненная в PyCharm вроде выводит правильный результат, но сообщение об ошибке присутствует все равно:

Traceback (most recent call last):
File “CUsers/…/класс.py”, line 27, in <module>
(1, 111, ‘cookie’, 300, 400)
(2, 222, ‘cookie’, 333, 444)
print(f“наименование нового товара: {nCom.name}.”)
AttributeError: ‘Commodity’ object has no attribute ‘name’


почему появляется сообщение об ошибке ‘Commodity’ object has no attribute ‘name’. Ведь объект Commodity имеет атрибут ‘name’?
Заранее спасибо

Прикреплённый файлы:
attachment Geany.PNG (11,9 KБ)

Офлайн

#2 Янв. 17, 2022 16:06:48

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1395
Репутация: +  124  -
Профиль   Отправить e-mail  

Пайтон не находит атрибут объекта

[code python]сюда писать код,чтобы отображался с отступами[/code]

Офлайн

#3 Янв. 17, 2022 16:20:18

Darudo_SandStorm
Зарегистрирован: 2022-01-17
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Пайтон не находит атрибут объекта

  
class Commodity():
	def __init__(self, id, productCode, name, wholeasePrice, retailPrice):
		self.__id = id
		self.__productCode = productCode
		self.__name = name
		self.__wholeasePrice = wholeasePrice
		self.__retailPrice = retailPrice
		
	def setCom(self, id, productCode, name, wholeasePrice, retailPrice):
		self.__id = id
		self.__productCode = productCode
		self.__name = name
		self.__wholeasePrice = wholeasePrice
		self.__retailPrice = retailPrice
	
	def getCom(self):
		return 	self.__id,
		self.__productCode,
		self.__name,
		self.__wholeasePrice,
		self.__retailPrice
	def description(self):
		print(f"{self.name} блаблабла")
	
nCom=Commodity(1, 111, 'cookie', 300, 400)
print(nCom.getCom())
nCom.setCom(2, 222, 'cookie', 333, 444)
print(nCom.getCom())
print(f"наименование нового товара: {nCom.name}.")
print(f"код нового товара: {nCom.productCode}.")
print(f"id товара: {nCom.id}")
print(f"оптовая цена: {nCom.wholeasePrice}")
print(f"розничная цена: {nCom.retailPrice}")

Офлайн

#4 Янв. 17, 2022 16:43:06

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1395
Репутация: +  124  -
Профиль   Отправить e-mail  

Пайтон не находит атрибут объекта

Darudo_SandStorm
почему появляется сообщение об ошибке ‘Commodity’ object has no attribute ‘name’. Ведь объект Commodity имеет атрибут ‘name’?
Заранее спасибо
двойное подчеркивание в начале имени атрибута означает что его не желательно изменять извне,соответственно доступ к нему затруднен. Имена которые могут использоваться извне должны быть без подчерков

Офлайн

#5 Янв. 17, 2022 17:00:30

Darudo_SandStorm
Зарегистрирован: 2022-01-17
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Пайтон не находит атрибут объекта

xam1816
А как же тогда присловутые геттеры и сеттеры?
 def setCom(self, id, productCode, name, wholeasePrice, retailPrice):
		self.__id = id
		self.__productCode = productCode
		self.__name = name
		self.__wholeasePrice = wholeasePrice
		self.__retailPrice = retailPrice
или в этом месте после знака равно нужно писать атрибутыс другими названиями, хотя так я уже пробовал, все равно не находит атрибуты?
скажите, пожалуйста, как обратиться к этим атрибутам?

Офлайн

#6 Янв. 17, 2022 17:50:53

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1395
Репутация: +  124  -
Профиль   Отправить e-mail  

Пайтон не находит атрибут объекта

не знаю будет ли вам понятно из такого примера

 class A: # есть класс A
    def __init__(self):
        self.__name = 'объект_а' # доступ к атрубуту не желателен извне
    # но мне нужно как-то его получить,для этого я делаю функцию get_name()
    def get_name(self):
        return self.__name
    # и как-то менять этот атрибут
    def set_name(self, new_name):
        self.__name = new_name
a = A()
print(a.get_name()) # вот так я его могу получить
# print(a.__name) # a так не могу : AttributeError: 'A' object has no attribute '__name'.
a.__name = 'qweqweqwewe' # определяю атрибут с таким же именем
print(a.__name) # и даже видно что изменилось >>> qweqweqwewe
print(a.get_name())  # но функция отвечающая за получение атрибута все равно вернет свое имя >>> объект_а
a.set_name('новое_имя_А') # спомощью назанченой функции меняю 
print(a.get_name()) # >>> новое_имя_А
print(a.__dict__) # здесь видно что имя атрибута изначально было на самом деле "_A__name" , а  '__name' было добавлено позже

Офлайн

#7 Янв. 17, 2022 17:55:22

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1395
Репутация: +  124  -
Профиль   Отправить e-mail  

Пайтон не находит атрибут объекта

вот ваш исправленный код

 class Commodity():
    def __init__(self, id, productCode, name, wholeasePrice, retailPrice):
        self.__id = id
        self.__productCode = productCode
        self.__name = name
        self.__wholeasePrice = wholeasePrice
        self.__retailPrice = retailPrice
    def setCom(self, id, productCode, name, wholeasePrice, retailPrice):
        self.__id = id
        self.__productCode = productCode
        self.__name = name
        self.__wholeasePrice = wholeasePrice
        self.__retailPrice = retailPrice
    def getCom(self):
        return self.__id,self.__productCode,self.__name,self.__wholeasePrice,self.__retailPrice
    def description(self):
        print(f"{self.__name} блаблабла")
nCom = Commodity(1, 111, 'cookie', 300, 400)
print(nCom.getCom())
nCom.setCom(2, 222, 'cookie', 333, 444)
print(nCom.getCom())
nCom.description()

вывод

(1, 111, 'cookie', 300, 400)
(2, 222, 'cookie', 333, 444)
cookie блаблабла

Process finished with exit code 0

Офлайн

#8 Янв. 17, 2022 18:16:45

Darudo_SandStorm
Зарегистрирован: 2022-01-17
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Пайтон не находит атрибут объекта

xam1816
вот ваш исправленный код
Обалдеть)) спасибо большое. Ошибка была и в синтаксисе геттера выходит, надо было их через запятую перечислять в одну строчку
и тогда более правильно будет записать так:
 def setCom(self, new_id, new_productCode, new_name, new_wholeasePrice, new_retailPrice):
		self.__id = new_id
		self.__productCode = new_productCode
		self.__name = new_name
		self.__wholeasePrice = new_wholeasePrice
		self.__retailPrice = new_retailPrice
Спасибо огромное еще раз

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version