面向对象编程:Python 3构造函数中的self问题
我目前正试图学习python,试图理解类,但我遇到了一个奇怪的问题面向对象编程:Python 3构造函数中的self问题,python,oop,constructor,spyder,blackjack,Python,Oop,Constructor,Spyder,Blackjack,我目前正试图学习python,试图理解类,但我遇到了一个奇怪的问题 class card: def __init__(self, s, num, name): self.suit = s self.number = num self.name = name class aceCard(card): def __init__(s): card.__init__(s, 0, "ace of " +
class card:
def __init__(self, s, num, name):
self.suit = s
self.number = num
self.name = name
class aceCard(card):
def __init__(s):
card.__init__(s, 0, "ace of " + s)
value1 = 1
valye11 = 11
class numCard(card):
def __init__(s, num):
name = num, " of ", s
card.__init__(s, num, name)
value = num
class faceCard(card):
def __init__(s, num):
if (num == 11):
name = "jack of " + s
elif (num == 12):
name = "queen of " + s
elif (num == 13):
name = "king of " + s
card.__init__(s, num, name)
value = 10
class suits:
cards = []
def __init__(s):
cards = [aceCard.__init__(s)]
n = 1
while n<11:
cards.append(numCard.__init__(s, n))
n+=1
while n<14 and n>10:
cards.append(faceCard.__init__(s, n))
n+=1
class deck:
adeck = []
def __init__():
adeck = [suits.__init__("clubs"), suits.__init__("diamonds"), suits.__init__("hearts"), suits.__init__("spades")]
def print():
for suitses in adeck:
for cardses in suitses:
print(cardses.name)
deck1 = deck.__init__()
deck1.print()
类卡:
定义初始化(self,s,num,name):
self.suit=s
self.number=num
self.name=名称
等级卡片(卡片):
定义初始值:
卡牌。uuuuuuuuuuuuuuuuuuuuuuuuuuu初始(s,0,“王牌”+s)
值1=1
勇气11=11
numCard类(卡):
定义初始值(s,num):
name=num,“of”,s
卡片。u u初始化(s,num,name)
值=num
类别识别卡(卡片):
定义初始值(s,num):
如果(num==11):
name=“杰克的”+s
elif(num==12):
name=“女王”+s
elif(num==13):
name=“国王”+s
卡片。u u初始化(s,num,name)
值=10
职业套装:
卡片=[]
定义初始值:
卡片=[ACECards.\uuuuu init\uuuuuu(s)]
n=1
虽然您的代码有几个问题,但问题的根源在于您不知道如何构造父实例
Python使用以下方法完成此任务:
类卡:
定义初始化(self,s,num,name):
self.suit=s
self.number=num
self.name=名称
等级卡片(卡片):
定义初始值(self,s):
super().uuu init_uuuuu(s,0,“+s的王牌)
#这没用。只创建被丢弃的局部变量
#一旦函数结束。
值1=1
勇气11=11
我可以推荐您作为Python OOP实现的一个很好的介绍。您对哪里感到困惑?错误信息非常清楚。您将card.\uuuu init\uuuu
定义为需要四个参数(请参阅您的代码)。在第10行中调用代码时,只提供了三个参数。您必须决定初始化方法将如何工作。还要注意,这不是创建类实例的常用方法:在每次调用中,您都创建一张卡片,并忽略您创建的对象--您无法再次引用该卡片。我建议(1)您重复关于类和实例的教程,以了解常见用法;(2) 您可以使用更好的编程实践:在编写更多代码之前,测试少量代码以确保它们正常工作。您已经发布了大约50行代码,其中有一些编程异常需要修复。@Prune关于“类和实例教程以了解常见用法”的任何好建议@Prune您实际上可以使用3个参数调用父初始化,但python使用它来先构造父实例(使用)然后将该实例提供给\uuuu init\uuu
。
runfile('###', wdir='###')
Traceback (most recent call last):
File "###", line 55, in <module>
deck1 = deck.__init__()
File "###", line 46, in __init__
adeck = [suits.__init__("clubs"), suits.__init__("diamonds"), suits.__init__("hearts"), suits.__init__("spades")]
File "###", line 34, in __init__
cards = [aceCard.__init__(s)]
File "###", line 10, in __init__
card.__init__(s, 0, "ace of " + s)
TypeError: __init__() missing 1 required positional argument: 'name'