使用Python构造函数时出错
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="...")