[英]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.