繁体   English   中英

类型错误:__init__() 需要 1 个位置参数,但给出了 2 个(无继承)

[英]TypeError: __init__() takes 1 positional argument but 2 were given (No Inheritence)

虽然似乎有几个人已经回答了这个问题,但他们往往指的是继承。 我收到错误: TypeError: __init__() takes 1 positional argument but 2 were given在我运行此段时TypeError: __init__() takes 1 positional argument but 2 were given

class game:
    def __init__(self):
        global drawPile  
        self.x = 1
        drawPile = deck(playerCount)

这段代码:

# Modules #
import random, time, termcolor
from os import system

# Functions ##
def clear(wait=0):
    time.sleep(wait)
    _ = system("clear")

"""
def cp(string, color=None, on_color=None, attrs=None):
    cprint(termcolor.colored(string,color,on_color,attrs))
"""     
def cprint(string, color= "magenta"):
    print(termcolor.colored(string, color))

def ans(x = ">>| ", color = "cyan"):
    return input(termcolor.colored(x, color))

cprint("How many players are there")
playerCount = int(ans())

class deck:
    def __init__(self):
        global player1, player2, player3, player4, player5, player6, playerlist
        if playerCount == 2:
            embasy = 0
            player1 = player(1)
            player2 = player(2)
            playerlist = [player1, player2]
        elif playerCount == 3:
            embasy = 0
            player1 = player(1)
            player2 = player(2)
            player3 = player(3)
            playerlist = [player1, player2, player3]
        elif playerCount == 4:
            embasy = 1
            player1 = player(1)
            player2 = player(2)
            player3 = player(3)
            player4 = player(4)
            playerlist = [player1, player2, player3, player4]
        elif playerCount == 5:
            embasy = 2
            player1 = player(1)
            player2 = player(2)
            player3 = player(3)
            player4 = player(4)
            player5 = player(5)
            playerlist = [player1, player2, player3, player4, player5]
        elif playerCount == 6:
            embasy = 3
            player1 = player(1)
            player2 = player(2)
            player3 = player(3)
            player4 = player(4)
            player5 = player(5)
            player6 = player(6)
            playerlist = [player1, player2, player3, player4, player5, player6]
        playerlist = playerlist
        self.set = [["embasy"] * embasy, ["diplomat (-1)"]*10, ["master spy (-5)"] * 10, ["celebrity 5"] * 10, ["investigate"] * 10, ["embargo"] * 10, ["safe house"] *10, ["embargo"] * 10, ["counterintellegence"] * 10, ["jail cell"] * 10, ["college student (1)"] * 10, ["family (3)"] * 10, ["spy (-3)"] * 10]
        self.cards = []
        for i in self.set:
            for j in i:
                self.cards.append(j)
        self.cards = random.sample(self.cards, len(self.cards))

    def deal(self):
        for j in range(5):
            for i in playerlist:
                i.drawCard(self.cards.pop(0))





class player:
    def __init__(self, number):
        embasy = [False, []]
        self.otherPlayers = []
        for i in range(1, start.drawPile.playerCount + 1):
            self.otherPlayers.append(number)
        self.otherPlayers.remove(number)
        self.hand = []
        self.leftPile = []
        self.rightPile = []
        self.embasyPile = []
        self.jailPiles = [0, []]

    def drawCard(self, card):
        self.hand.append(card)

    def playCard(self, card):
        self.hand.remove(card)

    def recieveCard(self, card, pile):
        if pile == "left":
            self.leftPile.append(card)
        elif pile == "right":
            self.leftPile.append(card)
        elif pile == "embasy":
            self.leftPile.append(card)
        elif pile == "jail":
            self.jailPiles[2].append(card)

    def playTurn(self):
        clear(3)
        cprint("In your hand you have:")
        for i in self.hand:
            cprint(f"\t{i}")
        time.sleep(2)
        cprint("Which would you like to play?")
        card = ans()
        if card not in self.hand:
            self.playTurn()
        if card == "embasy":
            pass



class game:
    def __init__(self):
        global drawPile  
        self.x = 1
        drawPile = deck(playerCount)

start = game()

如果我投入了我的大部分程序,我深表歉意。

当您调用甲板构造函数时,您正在尝试传递一个参数,在这一行中:

drawPile = deck(playerCount)

但是您将甲板构造函数声明为不带任何参数,除了 self:

class deck:
    def __init__(self):

这就是 Python 所抱怨的,但错误消息的实际文本让初学者感到困惑。 由于deck 是一个类而不是函数,Python 会自动向构造函数调用添加第一个参数self。 这就是为什么错误消息说“需要 1 个位置参数,但给出了 2 个”。 错误消息将“self”计为一个参数。 由于您试图提供另一个,这意味着“提供了两个”。

您的playerCount变量是全局变量,因此在创建deck对象时无需将其作为参数传递。 因此,只需将类game替换为以下几行:

class game:
    def __init__(self):
        global drawPile  
        self.x = 1
        drawPile = deck()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM