Python 尝试使用类函数在文件中写入字符串

Python 尝试使用类函数在文件中写入字符串,python,function,class,Python,Function,Class,我想写一个简单的游戏,需要在一个文件中写一些信息。到目前为止,代码是这样的: class Player: def __init__(self, name, password, file): with open(file) as inputFile: self.playerAndPw = inputFile.read() self.name = name self.password = password d

我想写一个简单的游戏,需要在一个文件中写一些信息。到目前为止,代码是这样的:

class Player:
    def __init__(self, name, password, file):
        with open(file) as inputFile:
            self.playerAndPw = inputFile.read()
        self.name = name
        self.password = password


    def add(self, name, password, file):
        file.write(name + " | " + password)


    def __str__(self):
        print("The player's name is called " + self.name + "\n")

print("Welcome to Guess My Number!")
start = input("Press 1 for New Account, 2 for Log In: ")

if start == "1":
    player = Player
    playerID = input("Enter a name: ")
    playerPassword = input("Enter a password: ")
    fileName = "PlayerAndPassword.txt"
    player.add(playerID, playerPassword, fileName)
在最后一行中,最后一个括号中有一个异常:“参数‘file’未填充。因此代码无法从我在最后一行中使用的函数中获取信息


如果有人能帮助我,那就太好了!谢谢!

这是我尽力更正代码的尝试。正如评论中指出的,您需要将
player
设置为
player
类的实例,将其实例化为
player=player(…)

class Player:
    def __init__(self, name, password, file):
        self.name = name
        self.password = password
        self.file = open(file, mode='a') #first assign file to self.file(referring to this file)


    def add(self): #need to add those parameters as they are already initialized by constructor 
        self.file.write(self.name + " | " + self.password)


    def __str__(self):
        print("The player's name is called " + self.name + "\n")

print("Welcome to Guess My Number!")
start = input("Press 1 for New Account, 2 for Log In: ")

if start == "1":
    playerID = input("Enter a name: ")
    playerPassword = input("Enter a password: ")
    fileName = "PlayerAndPassword.txt"
    player = Player(playerID, playerPassword, fileName) #create instance with said values
    player.add() #call the add function to add
因为您正在将播放器的名称、密码和用于存储凭据的文件传递给
player
构造函数,所以不需要将这些作为参数传递给
player.add
,这就是为什么我删除了所有参数的原因

我应该指出,此实现非常简单且不完整,只是为了解决眼前的问题而设计的。我的实现将导致每次调用
Player
构造函数后文件句柄保持打开状态。如果您选择这种方法,您可能需要阅读

控制台输出

欢迎猜我的号码!
按1表示新帐户,按2表示登录:1
输入一个名字:汤姆
输入密码:Foo
欢迎猜我的号码!
按1表示新帐户,按2表示登录:1
输入一个名字:迪克
输入密码:Bar
欢迎猜我的号码!
按1表示新帐户,按2表示登录:1
输入一个名字:Harry
输入密码:Baz
PlayersAndPasswords.txt

Tom | Foo
迪克·巴尔
哈里·巴兹

为什么要将
名称
密码
文件
作为参数传递给
播放器。如果已经将它们传递给类构造函数,请添加
?另外,
Player=Player
行并没有初始化
Player
的新实例。为此,需要
Player=Player(…)
并传入所需的参数。但您无法传递参数,因为您必须输入文件。看起来您的设计有缺陷:您无法使用文件参数创建构造函数,因为这意味着您永远无法创建新的播放机。最好使用load/save方法,并使用json序列化/取消序列化…等等问题是,
fileName
是一个字符串,但
add
需要的是一个文件而不是字符串。是的,我使用了注释。请注意,这种方法会留下一个打开的文件句柄,我个人会在这里使用JSON。JSON的优点是,它已经内置了序列化功能,使某些事情变得更容易(例如,玩家查找)。@mseivert你没有错,我将把这一点添加到我的答案中,因为这是一个很好的观点。保留一个打开的文件句柄不会影响这个程序的正确性。我的答案只是为了解决OP最紧迫的问题。@ErikaWorm很高兴能提供帮助,但堆栈溢出
class Player:
    def __init__(self, name, password, fileName):
        self.name = name
        self.password = password
        self.file = open(fileName, mode='a')

    def add(self):
        self.file.write(self.name + " | " + self.password + '\n')

    def __str__(self):
        print("The player's name is called " + self.name + "\n")


print("Welcome to Guess My Number!")
start = input("Press 1 for New Account, 2 for Log In: ")

if start == "1":
    playerId = input("Enter a name: ")
    playerPassword = input("Enter a password: ")
    fileName = "PlayerAndPassword.txt"
    player = Player(playerId, playerPassword, fileName)
    player.add()