2016-09-18 5 views
-1
class merchandise: 
    def __init__(self, item, quantity, cost): 
     self.__item = item 
     self.__quantity = quantity 
     self.__cost = cost 
    def set_item(self, item): 
     self.__item = item 
    def set_quantity(self, quantity): 
     self.__quantity = quantity 
    def set_cost(self, cost): 
     self.__cost = cost 
    def get_item(self): 
     return self.__item 
    def get_quantity(self): 
     return self.__quantity 
    def get_cost(self): 
     return self.__cost 
    def get_inventory_value(self): 
     return (format(self.__quantity * self.__cost, '.2f')) 
    def __str__(self): 
     for i in merchandise: 
      print (self.__item+',', self.__quantity,'@ $'+(format (self.__cost,'.2f'))) 

import merchandise 
def main(_): 
    def make_list(): 
     for count in range (1,3): 

      merchandise.set_item("hammer") 
      merchandise.set_quantity(10) 
      merchandise.set_cost(14.95) 
      print(hammer) 

      hardware = float (input ('Enter a new quantity for hardware ')) 
      jewelry = float (input ('Enter a new cost for jewelry ')) 
      hammer = merchandise.merchandise() 

    stuff = make_list() 
    print (stuff) 
main() 

Я не знаю, что я делаю неправильно. Я получаю там ошибку, которой нет set_item в товаре. Я пробовал немало вещей, и до сих пор ничего не получилось. Я здесь, или это что-то глупое.вызов функции класса python

+0

Вы должны инициализировать/инстанцирует – Li357

+0

ли класс и основной в отдельных файлах или один файл? Если в отдельности, когда вы «импортируете товар», «товар» является объектом модуля, «merchandise.merchandise» является классом. _Class_ не имеет метода 'set_item'. _Class instance_, с другой стороны, имеет метод 'set_item'. –

ответ

0

Ошибка не в том, что нет set_item; ошибка вызвана тем, что вы не инициализировались, и в результате требуемый позиционный аргумент self неявно передан.

При вызове экземпляров классов функций они становятся связанными методами в этом экземпляре, и экземпляр всегда (за исключением случаев, когда он оформлен) неявно передается в качестве первого аргумента.

Короче говоря, инициализировать экземпляр механизировать, а затем вызывать функции, а именно:

m = merchandise('', 10, 0.0) 
m.set_item("hammer") 
m.set_quantity(10) 
m.set_cost(14.95) 

Обратите внимание, что установка не требуется, вы можете предоставить их во время инициализации:

m = merchandise('hammer', 10, 14.95) 

Кроме того, вы не можете импортировать в модуль, который вы определяете (если это то, что вы делаете), это приведет к обычному возникновению ошибки. Если в разных модулях убедитесь, что вы импортировать фактический класс тоже:

from merchandise import merchandise 
+0

Я пробовал это и единственный способ, чтобы он не выдавал ошибку, был ли это m = merchandise.merchandise ('hammer', 10,14.95) , но когда я печать (молоток) или печать (м) Я получаю <объект merchandise.merchandise на 0x03632D90> –

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