Python基类在子类中调用_init_
我正在尝试用python制作一个战争卡片游戏,它改进了一本叫做自学程序员的书中的一个例子。在我的版本中,我想遵循自行车卡网站上的规则。为了回到我的问题,我编写了两个类Stack和一个Deck类继承Stack 牌组init使用一副牌组中的所有52张牌填充基类中的空列表变量牌,并将其洗牌。我在IDLE中测试这些类,发现当我创建Stack的对象时,似乎调用了来自Deck的init,并在没有创建子类对象时填充父类中的card变量。这是怎么回事?据我所知,父类看不到子类Python基类在子类中调用_init_,python,oop,inheritance,Python,Oop,Inheritance,我正在尝试用python制作一个战争卡片游戏,它改进了一本叫做自学程序员的书中的一个例子。在我的版本中,我想遵循自行车卡网站上的规则。为了回到我的问题,我编写了两个类Stack和一个Deck类继承Stack 牌组init使用一副牌组中的所有52张牌填充基类中的空列表变量牌,并将其洗牌。我在IDLE中测试这些类,发现当我创建Stack的对象时,似乎调用了来自Deck的init,并在没有创建子类对象时填充父类中的card变量。这是怎么回事?据我所知,父类看不到子类 from random impor
from random import shuffle
class Card:
suits = ["Clubs", "Spades", "Diamonds", "Hearts"]
values = [None, None, "2", "3", "4", "5", "6",
"7", "8", "9", "10", "Jack", "Queen", "King", "Ace"]
def __init__(self, v, s):
self.value = self.values[v]
self.suit = self.suits[s]
def __repr__(self):
return self.value + " of " \
+ self.suit
def __lt__(self, c2):
if self.value < c2.value:
return True
if self.value == c2.value:
if self.suit < c2.suit:
return False
return False
def __gt__(self, c2):
if self.value > c2.value:
return True
if self.value == c2.value:
if self.suit > c2.suit:
return False
return False
def __eq__(self, c2):
if self.value == c2.value:
return True
else:
return False
class Stack:
cards = []
def add(self, card):
self.cards.append(card)
def addToBottom(self, card):
self.cards.insert(0, card)
def removeCard(self):
return self.cards.pop()
def __repr__(self):
idx = len(self.cards) - 1
return self.cards[idx]
class Deck (Stack):
def __init__(self):
for i in range(2, 15):
for j in range(0, 4):
self.cards.append(Card(i, j))
shuffle(self.cards)
来自随机导入洗牌
班级卡:
套装=[“梅花”、“黑桃”、“钻石”、“红心”]
值=[None,None,“2”,“3”,“4”,“5”,“6”,
“7”、“8”、“9”、“10”、“杰克”、“女王”、“国王”、“王牌”]
定义初始化(self,v,s):
自我价值=自我价值[v]
self.suit=self.suits[s]
定义报告(自我):
返回self.value+“of”\
+西服
定义(自我,指挥与控制):
如果self.valuec2.value:
返回真值
如果self.value==c2.value:
如果自攻>c2自攻:
返回错误
返回错误
定义(自我,c2):
如果self.value==c2.value:
返回真值
其他:
返回错误
类堆栈:
卡片=[]
def添加(自身、卡):
self.cards.append(卡片)
def ADDTOBTOM(自身、卡):
self.cards.insert(0,卡片)
def removeCard(自):
return self.cards.pop()
定义报告(自我):
idx=len(自显卡)-1
返回自助卡[idx]
甲板(烟囱)等级:
定义初始化(自):
对于范围(2,15)内的i:
对于范围(0,4)内的j:
self.cards.append(卡片(i,j))
洗牌(自我牌)
这是因为类属性中有卡。如果先创建牌组
,然后创建堆栈
,则牌组的创建将填充每个人共享的Stack.cards
属性
您需要将卡片
作为实例属性:
class Stack:
def __init__(self):
self.cards = []
. . .
我运行了你的代码,无法重现你的问题。你能分享你在IDLE中输入的内容吗?你需要展示你是如何使用这些类的。-无法复制。