<p>您需要阅读有关范围、OOP和dicts的内容:</p>
<p>您没有添加到<code>Inventory.All_Inventory</code>中-您使用<code>All_Inventory = item_info</code>创建了一个新的本地</p>
<ul>
<li><a href="https://docs.python.org/3/tutorial/classes.html#python-scopes-and-namespaces" rel="nofollow noreferrer">https://docs.python.org/3/tutorial/classes.html#python-scopes-and-namespaces</a></li>
<li><a href="https://stackoverflow.com/questions/291978/short-description-of-the-scoping-rules">Short description of the scoping rules?</a></li>
</ul>
<p>将静态类属性和实例属性混合在一起,如下所示:</p>
<ul>
<li><a href="https://docs.python.org/3/tutorial/classes.html#class-objects" rel="nofollow noreferrer">https://docs.python.org/3/tutorial/classes.html#class-objects</a></李>
<li><a href="https://stackoverflow.com/questions/136097/what-is-the-difference-between-staticmethod-and-classmethod">What is the difference between @staticmethod and @classmethod?</a></li>
</ul>
<p>您正在错误地删除/访问词典-请参阅:</p>
<ul>
<li><a href="https://docs.python.org/3/tutorial/datastructures.html#dictionaries" rel="nofollow noreferrer">https://docs.python.org/3/tutorial/datastructures.html#dictionaries</a></li>
<li><a href="https://stackoverflow.com/questions/5844672/delete-an-element-from-a-dictionary">Delete an element from a dictionary</a></li>
</ul>
<p>固定:</p>
<pre><code>class Ebay_Inventory:
Inventory = {} # class property
@staticmethod
def print_inventory():
for k in Ebay_Inventory.Inventory:
for i in Ebay_Inventory.Inventory[k]:
print(k,i)
class Ebay_Item:
def __init__(self, key, manufacturer, object_type, price):
self.manufacturer = manufacturer
self.object_type = object_type
self.price = price
self.key = key
def __str__(self):
return f"{self.manufacturer} {self.object_type} {self.price}"
def __repr__(self):
return str(self)
@staticmethod
def add_item(key=None, man=None, obj=None, pri=None):
# use values if given, else ask - this is for demo purposes only
key = key or input("Enter key: ")
manufacturer = man or input("Enter Manufacturer: ")
object_type = obj or input("Enter what the item is: ")
price = pri or input("Enter price: ")
# create new item
item_info = Ebay_Inventory.Ebay_Item(key, manufacturer, object_type, price)
# add to class member, create key if need be
Ebay_Inventory.Inventory.setdefault(item_info.key,[]).append(item_info)
def delete_item(key=None):
delete = key or input("What is the item you want to delete?: ")
if delete in Ebay_Inventory.Inventory:
del Ebay_Inventory.Inventory[delete]
print("The item entered has been deleted.")
else:
print("Item not found")
def __str__(self):
return Ebay_Inventory.print_inventory()
# add 2 items and print
Ebay_Inventory.add_item(1,"Me","Me",1000)
Ebay_Inventory.add_item(2,"You","You",1000)
Ebay_Inventory.print_inventory()
# remove non existent and existent item and print
Ebay_Inventory.delete_item(3)
Ebay_Inventory.delete_item(2)
Ebay_Inventory.print_inventory()
</code></pre>
<p>输出:</p>
<pre><code>1 Me Me 1000
2 You You 1000
Item not found
The item entered has been deleted.
1 Me Me 1000
</code></pre>