[英]Python: Dataclass that inherits from base Dataclass, how do I upgrade a value from base to the new class?
[英]How do I use a specific variable from a dataclass in a normal class in Python?
所以我想做一个 class 作为一个包。 我只想在那个包里做 2 个功能:一个 function 在包中添加一个项目并添加指定数量,一个 function 取出一个项目和该项目的指定数量。
对于添加项目 function,我希望能够添加具有一定数量的新项目,如果该项目已经在列表中,则将放入的数量添加到该项目的现有数量中。
对于取出物品function,如果要取出的数量与已放入袋子的数量相同,则将该物品从列表中删除。 如果要取出的数量少于袋子中的数量,则该物品的数量会减少。 如果要取出的数量多于袋子中的数量,则会出现简单的错误消息。 当然,如果要取出的项目不在列表中,则会出现错误消息。
袋子使用列表来存储物品。 我希望项目使用数据类来存储项目的数量和名称。 我已经做了这个:
from dataclasses import dataclass
@dataclass
class Item:
amount: int
item1: str
class Bag:
def __init__(self):
self.liste_item = []
def add_item(self, item, quantity):
if item in self.liste_item:
Item.amount += quantity
else:
self.liste_item.append(Item(quantity, item))
print(self.liste_item)
def take_item(self, item, quantity):
if item in self.liste_item:
if Item(quantity, item).amount == quantity:
del item
elif Item(quantity, item).amount < quantity:
print(f"You do not have {quantity} {item} in your bag.")
else:
Item.amount -= quantity
else:
print(f"{item} is not in your bag.")
print(self.liste_item)
此代码不起作用。 问题是我不知道如何使用和更改数据类中特定变量的属性。 在这种情况下,它正在更改特定项目的数量。 我遇到的另一个问题是我不知道该怎么说“如果这个数量的这个物品在包里......”甚至是行:
if item in self.liste_item:
在这一行中,我想检查特定项目是否在列表中。 问题是它根本不起作用,并且代码认为袋子里的物品不在袋子里。 它仅在我进行更改时才有效:
if item not in self.liste_item:
这对我来说毫无意义。 请帮我解决一下这个。
Item.amount
不是 class 属性; 它只是一个准声明的实例属性。 数据类装饰器的目的class
dataclass
的内容来创建稍后在程序中使用的“实际” class。 该过程的一部分是自动生成Item.__init__
沿线
def __init__(self, amount, item1):
self.amount = amount
self.item1 = item1
因此,您不应该直接向Item.amount
添加任何内容。 需要在self.liste_item
中找到对应的实例并更新。
from dataclasses import dataclass
@dataclass
class Item:
amount: int
item1: str
class Bag:
def __init__(self):
self.liste_item: list[Item] = []
def add_item(self, item_name: str, quantity: int):
for item in self.liste_item:
if item.item1 == item_name
item.amount += quantity
break
else:
# Create a new Item instance if no match was found.
self.liste_item.append(Item(quantity, item_name))
...
take_item
必须以类似方式重写。
class Bag:
bag = {}
def add_item(self, new_item, quantaty):
if new_item in self.bag:
self.bag[new_item] += quantaty
else:
self.bag[new_item] = quantaty
def remove_item(self, item, quantaty):
if item in self.bag:
if quantaty > self.bag[item]:
print(f"Only {self.bag[item]} of {item} left. Cant substract {quantaty}")
else:
self.bag[item] -= quantaty
else:
pass
Kevin = Bag()
Kevin.add_item("sword", 10)
print(Kevin.bag)
Kevin.add_item("sword", 10)
print(Kevin.bag)
Kevin.add_item("stone", 10)
print(Kevin.bag)
Kevin.remove_item("stone", 5)
print(Kevin.bag)
Kevin.remove_item("stone", 6)
print(Kevin.bag)
云应该是这样的。 你可以试试看。 我刚刚为您编写了此代码,我使用字典来保护所有人。 希望您能看到您如何访问该变量:) 得到 ua 图片因为我要转储以将其放在这里 xD
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.