关于类:用默认参数在python中进行构造函数重载

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...")

现在,obj1 = myclass("01-Feb-2019")工作了。但是obj = myclass()抛出了以下错误,

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强大的检查功能进行多调度

注意,在方法声明中分配默认值应该非常勉强,因为它的工作方式可能与来自另一种语言的不同。定义默认值的正确方法是使用None并分配这样的默认值

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语言不同,不能定义多个构造函数。但是,如果没有传递默认值,则可以定义一个默认值。