Constructor overloading in python with default arguments
我在Python中定义了一个类,如下所示。
1 2 3 4 5 6 | class myclass: def __init__(self,edate,fdate=""): print("Constructors with default arguments...") def __init__(self): print("Default Constructor") |
我为这个类创建了一个对象,
1 | obj = myclass() |
它很好用。我希望下面的对象创建可以工作,
1 | obj1 = myclass("01-Feb-2019") |
但它抛出了一个错误说,
1 2 3 4 | Traceback (most recent call last): File"class.py", line 9, in <module> obj = myclass("01-Feb-2019") TypeError: __init__() takes 1 positional argument but 2 were given |
但是如果我改变类的定义如下,
1 2 3 4 5 | class myclass: def __init__(self): print("Default Constructor") def __init__(self,edate,fdate=""): print("Constructors with default arguments...") |
现在,
1 2 3 4 | Traceback (most recent call last): File"class.py", line 10, in <module> obj = myclass() TypeError: __init__() missing 1 required positional argument: 'edate' |
我们可以在python中定义一个构造函数重载吗?我可以定义一个接受空参数和一个参数的构造函数吗?
正如其他人所写,python不支持多个构造函数*)。但是,您可以按照以下方式轻松地模拟它们:
1 2 3 4 5 6 | class MyClass: def __init__(self, edate=None, fdate=""): if edate: print("Constructors with default arguments...") else: print("Default Constructor") |
然后你可以做
1 2 3 4 | obj1 = MyClass("01-Feb-2019") => Constructors with default arguments... obj2 = MyClass() => Default Constructor |
*)除非您使用Python强大的检查功能进行多调度
注意,在方法声明中分配默认值应该非常勉强,因为它的工作方式可能与来自另一种语言的不同。定义默认值的正确方法是使用
1 2 3 4 5 | class MyClass: def __init__(self, edate=None, fdate=None): if edate: fdate ="" if fdate is None else fdate ... |
python没有多个构造函数-在python中看到多个构造函数吗?
与Java或C语言不同,不能定义多个构造函数。但是,如果没有传递默认值,则可以定义一个默认值。