使用Python构造函数时出错

1 投票
6 回答
662 浏览
提问于 2025-04-15 13:06
class fileDetails :

    def __init__(self,host,usr,pwd,database):
        self.host=host
        self.usr.usr
        self.pwd=pwd
        self.database=database

    def __init__(self,connection,sql,path):
        self.connection=mysql_connection()
        self.sql=sql
        self.path=path

如果我使用构造函数的话,就会出现错误:

onnetction = fileDetails('localhost',"root","",'bulsorbit')
TypeError: __init__() takes exactly 4 arguments (5 given)

6 个回答

1

在Python中,类里的函数其实是存储在一个字典里的(记住,构造函数也只是普通的函数)。这就意味着同名的函数只能有一个。如果你定义了多个同名的函数,最后一个定义的会把之前的都覆盖掉,结果你只会剩下一个函数。

我建议你去看看关键字和默认参数,这样可以找到实现你想要的功能的正确方法。

4

定义一个构造函数,并且这个构造函数可以接受可选的参数。

def __init__(self,host='host',usr='user',pwd='pwd',database='db',connection=None,sql=None,path=None):
  if connection:
    # however you want to store your connection
    self.sql=sql
    self.path=path
  else:
    self.host=host
    self.usr.usr
    self.pwd=pwd
    self.database=database

或者类似这样的东西。

10

在Python中,构造函数(或者其他任何函数)是不允许重载的。这意味着你不能为你的类定义两个__init__函数。

你可以看看这个帖子或者这个帖子

主要的思路是使用默认值或者创建“备用构造函数”或者检查你的参数数量和类型,以便选择应用哪个方法。

def __init__(self, **args):

这样args就会是一个包含所有参数的字典。这样你就能区分

connection = fileDetails(host='localhost',usr="root",pwd="",database='bulsorbit')

connection = fileDetails(connection="...",sql="...",path="...")

撰写回答