Python 2.7 TypeError:__ init __()需要4个参数(给定1个)

时间:2015-04-11 17:55:23

标签: python python-2.7

在查看了这种性质的所有其他问题后,答案似乎是相同的,编码器没有传递参数,因为他们已将__init__()留空。但是,在下面的代码中,我没有把它留空,并试图传递所有四个参数,如最后一行所示。

然而我仍然得到TypeError。我无法弄清楚为什么我试图通过的论点被忽略了。

class Login:
    def __init__(self, username, password, site):
        self.username = username
        self.password = password
        self.site = "http://" + site + ".wikia.com"
        Login.login(self)

    def login(self):
        self.session = requests.session()
        login_data = {'action': 'login', 'lgname': self.username, 'lgpassword': self.password, 'format':'json'}
        response = self.session.post(self.site + "/api.php",data=login_data)
        content = json.loads(response.content)
        login_data['lgtoken'] = content['login']['token']
        response = self.session.post(self.site + "/api.php",data=login_data)
        content = json.loads(response.content)
        if content['login']['result'] != 'Success':
            raise Exception("Login error: Could not log in via MediaWiki API.")

if __name__ == '__main__':
    Login = Login()
    Login.__init__(self, "username", "password", "site")

感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:8)

虽然mu [{3}}正确的方法,但我想在他的代码中强调一些能够修复你的另一个问题的东西。您的代码是:

if __name__ == '__main__':
    Login = Login()
    Login.__init__(self, "username", "password", "site")

即使您通过运行

正确地实例化了Login()
Login = Login("username", "password", "site")

您将无法再次使用Login课程,因为您只是用Login变量覆盖了它。确保您的实例与类名不同,请使用

login = Login("username", "password", "site")

代替。

答案 1 :(得分:2)

您正在错误地调用__init__,请改用它。当您自动初始化新对象时,会调用__init__

if __name__ == '__main__':
    login = Login("username", "password", "site")

你也应该检查一下python docs