【问题标题】:How can i perform constructor overloading in python?如何在 python 中执行构造函数重载?
【发布时间】:2019-11-14 14:02:20
【问题描述】:

我有一个员工类,我想用两种不同的方式填写它,并且想知道通过构造函数重载来做到这一点

class Employee:

    def __init__(self, first, last, pay):
        self.first = first
        self.last = last
        self.pay = pay

    def __init__(self, data):
        (self.first, self.last, self.pay) = data

这是因为,要么我必须像

这样初始化类
Employee('John','Smith',3000)

或者我想通过传递一个元组来初始化类

data = ('John','Smith',3000)
Employee(data)

【问题讨论】:

  • Python 中没有构造函数/方法/函数重载。您可以使用可选的关键字参数,也可以根据参数的类型决定要做什么。但是,对于这种特定情况,您可以只执行Employee(*data),将元组解包为各个参数。
  • 如果您使用 Employee(*data) 而不是 Employee(data),则可以使用单个直接构造函数。

标签: python constructor overloading


【解决方案1】:

你没有,真的。你可以搞乱像

这样的定义
def __init__(self, *args):

然后进行大量处理,检查参数的数量、第一个参数的类型等。或者,您可以简单地明确定义一个 separate 构造函数,其名称准确地描述了它的作用.类方法可以在将元组的内容传递给默认构造函数之前对元组进行一些验证。

class Employee:
    def __init__(self, first, last, pay):
        self.first = first
        self.last = last
        self.pay = pay

    @classmethod
    def from_tuple(cls, t):
        if len(t) != 3:
            raise ValueError("Wrong number of items in the tuple")

        return cls(*t)

data = ('John','Smith',3000)
Employee.from_tuple(data)

当然,类方法定义的简单性表明您不需要这么麻烦:如果您知道元组具有正确的数量和类型的值,只需解压缩 data 以与默认构造函数。

Employee(*data)

“默认构造函数”是指Employee.__new__ 解析为的方法。 Employee.__init__ 在技术上是一个 initializer,在适当的时候在 __new__ 返回的已构造实例上调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多