__init__() 缺少 4 个必需的位置参数:

__init__() missing 4 required positional arguments:

我已经创建了这段代码,但我一直收到错误消息: TypeError: __init__() 缺少 4 个必需的位置参数:'exercise''friendliness''intelligence''drool'

下面是我的代码:

class Dog_card_player: #creates the class
    def __init__(self,name, exercise, friendliness, intelligence, drool):
        self.name = name
        self.exercise = exercise#.random.randint(1,100)
        self.friendliness = friendliness#.random.randint(1,100)
        self.intelligence = intelligence#.random.randint(1,100)
        self.drool = drool#.random.randint(1,100)

    def Card_stats_player(self): #creates the stats for the card
        print("Name: " + self.name)
        print("Exercise: " + self.exercise)
        print("Friendliness: " + self.friendliness)
        print("Intelligence: " + self.intelligence)
        print("Drool: " + self.drool)


def Printing_card_player():
    with open ("dogswrite.txt") as f1:
        Dog_name_player = Dog_card_player(f1.readline())
        Dog_name_player.Card_stats_player()


Printing_card_player()

.readline() 方法仅 returns 一个字符串,.readlines() returns 一个列表。当您需要多个字符串时,您将提供 1 个字符串作为 class 的参数。

您必须将 f1.readline() 的结果解析为单独的参数

假设您的文本文件格式如下

spot, 1, 2, 3, 4

会是这样的

m_input = f1.readline()
m_input = m_input.split(',')

Dog_name_player = Dog_card_player(m_input[0], m_input[1], m_input[2], m_input[3],m_input[4] )

您定义 class 的方式 需要 5 个参数才能创建:

class Dog_card_player: #creates the class
    def __init__(self,name, exercise, friendliness, intelligence, drool):

如果在创建对象时假设一行包含五个参数,那么您应该 "extract" 从该行开始。也就是说,而不是

Dog_name_player = Dog_card_player(f1.readline())

你应该有这样的东西:

line = f1.readline()
pars = line.split() # or line.split(',') for a comma-separated list
if len(pars) < 5:
    print("Not enough arguments")
    return
Dog_name_player = Dog_card_player(*pars)

如果每一行总是正好有五个参数,那么你可以简单地这样做:

Dog_name_player = Dog_card_player(*f1.readline().split())