在Python中创建列表对象
我有一个对象列表(这是一个游戏),我想让列表本身成为一个对象 第一个对象是卡片:在Python中创建列表对象,python,Python,我有一个对象列表(这是一个游戏),我想让列表本身成为一个对象 第一个对象是卡片: class card (object): def __init__ (self,suit,value): self.suit = suit self.value = value def cardpointvalue(self): #not relevant, basically says if card is this return this value
class card (object):
def __init__ (self,suit,value):
self.suit = suit
self.value = value
def cardpointvalue(self):
#not relevant, basically says if card is this return this value for it
# there is also a __str__ function and a ___repr___ function, don't think
# they are important
这是我的卡片对象,我还有一个手对象,这是我遇到麻烦的地方
class hand (object):
def __init__ (self,list_cards):
self.list_cards = list_cards
def hand_value (self):
for i in list:
handpointvalue += (i.cardpointvalue())
return handpointvalue
在我的main()中,我遇到了麻烦
class hand (object):
def __init__ (self,list_cards):
self.list_cards = list_cards
def hand_value (self):
for i in list:
handpointvalue += (i.cardpointvalue())
return handpointvalue
我有列表,我把牌组中的每一张牌都做成一个卡片对象。然后我将它们传递到名为list1和list2的人手中(对于每个玩家,为了简单起见,我只处理list1)
一旦我把每个玩家的牌都放到他们的名单上。我尝试将列表放入hand对象,然后对其运行handpointvalue
函数
所以
这就是我遇到麻烦的地方。我尝试过多种方法,最近的一种是:
hand(list1)
print (list1.handpointvalue())
为什么这不起作用?如何将此对象列表设置为对象本身?首先,切勿使用内置关键字作为变量名称(例如
列表
)。
其次,hand.hand_值
有一个udefined变量(handpointvalue
),应该不起作用。第三,您甚至没有调用hand.hand\u value()
:
首先,切勿使用内置关键字作为变量名称(例如
列表
)。
其次,hand.hand_值
有一个udefined变量(handpointvalue
),应该不起作用。第三,您甚至没有调用hand.hand\u value()
:
由于您没有发布任何回溯或代码,因此我敢打赌您的问题有三个方面:1)没有您提供给我们的名为handpointvalue的方法2)您没有使用self获取对象属性,3)您似乎不了解构造函数是如何工作的 根据描述,这就是我认为您正在尝试的:
cards = [card_deck.pop(0) for i in range(10)]
class Hand(object):
def __init__(self, cards):
self.cards = cards
def handpointvalue(self):
return sum([c.cardpointvalue() for c in self.cards])
hand = Hand(cards)
v = hand.handpointvalue()
# v will now be some number, assuming you've implemented cardpointvalue correctly
由于您没有发布任何回溯或代码,因此我敢打赌您的问题有三个方面:1)没有您提供给我们的名为handpointvalue的方法2)您没有使用self获取对象属性,3)您似乎不了解构造函数是如何工作的 根据描述,这就是我认为您正在尝试的:
cards = [card_deck.pop(0) for i in range(10)]
class Hand(object):
def __init__(self, cards):
self.cards = cards
def handpointvalue(self):
return sum([c.cardpointvalue() for c in self.cards])
hand = Hand(cards)
v = hand.handpointvalue()
# v will now be some number, assuming you've implemented cardpointvalue correctly
问题是您应该以类hand或其他方式初始化handpointvalue
问题是你应该用类hand或其他方式初始化handpointvalue,对了,我知道这个列表永远不应该被使用,实际上就是为了这个。所以在开始遍历列表(应该称为hand)之前,我应该使handpointvalue=0,但是,这并不是我真正遇到的问题。发生的情况是,我得到了一个类型错误,即对象不可iterable。“对象不可iterable”错误仅仅意味着您试图在一个对象上迭代,而该对象没有实现
\uuuuIter\uuIter()
方法。例如,10中x的将引发该错误,因为整数不能实现该错误。另一方面,范围(10)内的x的
工作正常,因为列表是可编辑的(实现\uuuu iter\uuuu()
)。请参阅@user1887945这些卡存储在self.list\u cards
中,但是您迭代了list
(这是内置列表的类对象)-这会产生一个类型错误,因为类通常是不可编辑的。是的,我知道永远不应该使用列表,实际上正是为了这个目的。所以在开始遍历列表(应该称为hand)之前,我应该使handpointvalue=0,但是,这并不是我真正遇到的问题。发生的情况是,我得到了一个类型错误,即对象不可iterable。“对象不可iterable”错误仅仅意味着您试图在一个对象上迭代,而该对象没有实现\uuuuIter\uuIter()
方法。例如,10中x的将引发该错误,因为整数不能实现该错误。另一方面,范围(10)内的x的
工作正常,因为列表是可编辑的(实现\uuuu iter\uuuu()
)。请参见@user1887945这些卡存储在self.list\u cards
中,但您在list
上迭代(这是内置列表的类对象)-这会导致类型错误,因为类通常不可编辑。点值应该是函数的局部值,而不是成员变量(调用函数两次,第二个结果将是第一个结果的两倍)。此外,它可能是一个整数值,而不是一个字符串……而且您没有看到实际问题,即他没有调用正确的函数。点值应该是函数的局部值,而不是成员变量(调用函数两次,第二个结果将是第一个结果的两倍)。此外,它可能是一个整数值,而不是字符串……您没有看到实际问题,即他没有调用正确的函数。
class hand (object):
def __init__ (self,list_cards):
self.list_cards = list_cards
self.handpointvalue = ""
def hand_value (self):
for i in list:
self.handpointvalue += (i.cardpointvalue())
return self.handpointvalue