我正在設計 RPG 背后的機制。有 Item、Player、NPC 等的類。 Player 類具有屬性庫存和設備。設備是一個字典串列,例如:
player1.equipment = [{item_slot_a:item_a}, {item_slot_b:item_b}, ..., {item_x:item_x}]
這里,item_slot_a指的是一些任意的“item”插槽,如頭盔、靴子、手套等,并item_a指的是 Item 類的實體,item1 或類似的東西。因此,請注意,整個物件被存盤為鍵值字典對的值。
這個可以嗎?
將整個物件作為值傳遞是否安全、高效和可靠?player.equip(thing)在我測驗該功能之前,我沒有注意到這會發生。我有一個(希望)聰明的方法來確定可裝備物品的適當設備槽,然后我......嗯......將物品“系結”到物品槽作為鍵:值對。我列印了庫存來測驗equip() 函式,看到了這個:
player1 = create_player('Bob', 'reaver', 1)
player1.show_equipment()
player1.equip(piece_of_gear)
player1.show_equipment()
Output: [{'helmet': None}, {'torso': None}, {'hand': <__main__.Gear object at 0x000001FF200BC0D0>}, {'legs': None}, {'foot': None}, {'neck': None}, {'ring': None}, {'ear': None}, {'charm': None}, {'mh_weapon': None}, {'oh_weapon': None}, {'twohand_weapon': None}]
如果我是正確的,這是列印函式回傳記憶體中表示物件的地址。這是否代表任何問題?如果我只是將物件用作存盤機制來檢索相關值(其預期用途),我通常不會看到這一點,這可能只是我沒有適當設計show_equipment()函式的癥狀。
請盡可能就我的代碼的結構和可靠性提出建議。任何投入將不勝感激。
作為參考,我的player.show_equipment函式如下所示:
print('Equipment:')
print(self.equipment)
return\`\`\`
顯然,如果我想列印設備串列中準確的內容,我可以檢索記憶體中的物件(它將是 Item 類的一個實體),然后列印 item.name(它只是一個字串,我是這樣寫的) 而不是列印整個專案。我對創建包含物件的字典串列的安全性和有效性更好奇。
uj5u.com熱心網友回復:
將整個物件作為值傳遞是否安全、高效和可靠?
是的!Python 中的一切都是物件。
如果我是正確的,這是列印函式回傳記憶體中表示物件的地址。這是否代表任何問題?... 是列印函式回傳記憶體中表示物件的地址。這是否代表任何問題?
這里沒有問題。它完全取決于__repr__類的覆寫。如果沒有,則默認實作是列印出id()物件及其型別別。例如
>>> class Test: pass
>>> print(Test())
<__main__.Test object at 0x00000185FF1C5D30>
>>> class Test:
... def __repr__(self): return "Tada!"
>>> print(Test())
Tada!
請盡可能就我的代碼的結構和可靠性提出建議。任何投入將不勝感激。
我不會使用無型別的字典串列作為存盤專案的方式,而是使用資料類來表示專案。這些型別類是存盤純資料的理想方式,并為您實作類似__repr__,__init__和其他有用的方法!例如:
from dataclasses import dataclass
from typing import Optional
@dataclass
class Gear:
name: str
attack_rating: int = 0
magic_rating: int = 0
defense_rating: int = 0
@dataclass
class Equipment:
helmet: Optional[Gear] = None
torso: Optional[Gear] = None
hand: Optional[Gear] = None
使用這個類,您可以輕松構建您的播放器配置!
>>> player_equipment = Equipment()
>>> player_equipment.helmet = Gear("Tiara", magic_rating=15)
>>> print(player_equipment)
Equipment(helmet=Gear(name='Tiara', attack_rating=0, magic_rating=15, defense_rating=0), torso=None, hand=None)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/453475.html
下一篇:回傳兩個字典的差
