关于python:重载 __init__()方法会导致错误

Overloading __init__() method results in error

本问题已经有最佳答案,请猛点这里访问。

我在一个类中有两个构造函数,但是当我调用其中一个(一个只有一个参数的构造函数-而不是一个有4个参数的构造函数)时,它会导致一个错误,说它需要比给定的1更多的参数。

课程如下:

1
2
3
4
5
6
7
8
class Message:
def __init__(self):
    self.data = None

def __init__(self, type, length, data):
    self.type = type
    self.length = length
    self.data = data

对它的调用(在这里我也得到了错误):

1
msg = Message()

问题可能出在哪里?难道它不能与C++相媲美吗?如果不是,我怎么还能以另一种方式得到同样的结果呢?


在一个类中不能有两个__init__方法。

您的代码有效地做的是重写第一个方法,这样它就永远不会被使用,然后您会得到一个错误,因为您没有提供足够的参数。

解决这个问题的一种方法是使用关键字参数提供默认值。这样,如果您创建没有值的Message对象,它将使用默认值。下面的示例使用None作为默认值,但它可能更复杂:

1
2
3
4
5
6
class Message(object):

    def __init__(self, type=None, length=None, data=None):
        self.type = type
        self.length = length
        self.data = data


python不能这样工作。使用此:

1
2
3
4
5
class Message:
    def __init__(self, type=None, length=None, data=None):
        self.type = type
        self.length = length
        self.data = data