这个赋值的目的是在Python中定义一个类,并用它来创建一个对象并显示它的组件。我已经创建了一个创建Inventory项目并显示信息的类,但是我在主类中添加了库存列表并显示用户友好信息时遇到了问题。我觉得这很容易实现,但我似乎无法弄明白。这是我到目前为止所拥有的。
class InventoryItem(object):
def __init__(self, description, unit_cost, items_in_stock):
self.description = description
self.unit_cost = unit_cost
self.items_in_stock = items_in_stock
print('Description: ' + self.description)
print('Item Costs: ' + str(self.unit_cost))
print('Number in stock: ' + str(self.items_in_stock))
if __name__ == '__main__':
inventory_list = []
cookies = InventoryItem('Cookies', 5.00, 24)
print(inventory_list)
inventory_list.append(cookies)
print(inventory_list)
我得到的输出是:
Description: Cookies
Item Costs: 5.0
Number in stock: 24
[]
[<__main__.InventoryItem object at 0x00E85A10>]
第一部分是预期的,除了我不知道为什么它似乎显示该数据的内存位置?任何帮助将不胜感激。
答案 0 :(得分:3)
有两种称为__str__
和__repr__
的魔术方法,可用于此类情况。默认情况下,如果未覆盖,则打印对象只会以您看到的<...>
格式打印其内存内容。
区别? __repr__
打印对象的表示(例如列表内)。 __str__
是您在该对象上调用print()
时看到的内容。
class InventoryItem(object):
def __init__(self, description, unit_cost, items_in_stock):
self.description = description
self.unit_cost = unit_cost
self.items_in_stock = items_in_stock
def __str__(self):
string = 'Description: ' + self.description + '\n'
string += 'Item Costs: ' + str(self.unit_cost) + '\n'
string += 'Number in stock: ' + str(self.items_in_stock)
return string
def __repr__(self):
return self.__str__()
if __name__ == '__main__':
inventory_list = []
cookies = InventoryItem('Cookies', 5.00, 24)
print(inventory_list)
inventory_list.append(cookies)
print(inventory_list)
输出:
[]
[Description: Cookies
Item Costs: 5.0
Number in stock: 24]
让我们在__str__
和__repr__
方法中稍微改变一下。这将帮助您理解两者之间的区别。
class InventoryItem(object):
...
def __str__(self):
string = 'Description: ' + self.description + '\n'
string += 'Item Costs: ' + str(self.unit_cost) + '\n'
string += 'Number in stock: ' + str(self.items_in_stock)
return string
def __repr__(self):
return 'Hi!'
if __name__ == '__main__':
inventory_list = []
cookies = InventoryItem('Cookies', 5.00, 24)
print(inventory_list)
inventory_list.append(cookies)
print(inventory_list)
打印:
[]
[Hi!]
现在,如果你致电print(cookies)
,你会得到这个:
Description: Cookies
Item Costs: 5.0
Number in stock: 24
如果您选择在班级中实施这些对象,请确保从这些方法中返回有效的str
个对象。
答案 1 :(得分:2)
您需要做的是覆盖班级的__repr__
方法。
像这样:
def __repr__(self):
return 'Description: ' + self.description + ', Item Costs: ' + str(self.unit_cost) + ', Number in stock: ' + str(self.items_in_stock)