【发布时间】:2015-07-26 23:41:56
【问题描述】:
如何从持有对象的类中删除对象?
这个问题听起来有点令人困惑。基本上,我有一个角色类,它有一个清单 - 一个项目对象列表。我在角色类中的一种方法是从库存中移除物品。我知道为了做到这一点,我只需要做 (listname).remove(item),但是我遇到了错误。如果我尝试诸如
之类的东西,我会不断收到 "TypeError: 'str' object is not callable"player1.removeInventory(inv[0]) 其中 inv 是对象列表。
这是我的物品和库存类:
物品
class Item(object):
def __init__(self, itemType, value):
self.__itemType = itemType
self.__value = value
到项目的字符串
def __str__(self):
out = ""
out += "\nType: " + self.__itemType
out += "\nValue: " + str(self.__value)
return out
库存类别
class Inventory(object): #Aggregation from item
def __init__(self, items):
self.__items = items #A list of items
为库存提供字符串
def __str__(self):
out = ""
out += "\nItems: "
for x in self.__items:
out += str(x)
return out
库存是角色类中的一个参数。
字符类
class Player(object): #Aggregation from Inventory
def __init__(self, name, age, gender, playerClass, HP, ATK, DEF, inventory, gold = 0, level = 1, defending = False):
self.__level = level
self.__name = name
self.__age = age
self.__gender = gender
self.__playerClass = playerClass
self.__HP = HP
self.__ATK = ATK
self.__DEF = DEF
self.__inventory = inventory ##list of items...###
self.__gold = gold
self.__defending = defending
使用属性获取库存
@property
def inventory(self):
number = 1
out = ""
for item in self.__inventory:
out += str(item)
number +=1
return out
删除项目的方法
@inventory.setter
def removeInventory(self, item):
self.__inventory.remove(item)
我尝试运行的代码
i1 = Item("Health potion", 1)
i2 = Item("Health potion", 1)
inv = [i1,i2]
player1 = Player("Brandon",19,"Male","Wizard", 100, 15, 10, inv, 200)
print(player1.inventory)
player1.removeInventory(inv[0])
print(player1.inventory)
【问题讨论】:
-
这不足以重现您的错误。例如,您不包括设置
self.__inventory的位置。 -
您的示例非常适合我,但我必须删除 @inventory.setter 行以避免“NameError: name 'inventory' is not defined”。那么错误一定是存在的!
-
@jblasco 我不需要 setter 属性来使用它吗?尽管删除该行后该程序也对我有用...
-
我不是 setter 方面的专家,但是不,您不需要它们,它们只是更改某些属性值的便捷方法。但是您需要将它们命名为完全相同,请参见 python-course.eu/python3_properties.php 。在那里,您可以看到您需要更改名称 removeInventory( 以便让 inventory( 正确使用 setter。不过,我不会这样做,因为我确定您只是想添加和删除东西,因此,您班级中的普通方法可以解决问题!
标签: python class oop methods typeerror