【问题标题】:__init__ method that takes multiple arguments [duplicate]__init__ 接受多个参数的方法[重复]
【发布时间】:2018-01-28 14:04:53
【问题描述】:

我确实创建了一个新的 datetime.date 类似对象

class WorkDate(datetime.date):
    pass

WorkDate 的功能是(对这个问题不重要)当您添加 timedelta 对象时,它只会移动到工作日日期。即,当您在日期为WorkDate 的星期五添加timedelta(1) 时,它将返回日期为WorkDate 的下一个星期一。


我如何__init__ WorkDate 通过这两种方法中的任何一种来创建相同的结果
x = WorkDate(2017, 8, 3)
y = WorkDate(datetime.date(2017, 8, 3))


我确实尝试过,但不适用于使用日期对象进行初始化
class WorkDate(datetime.date):
    def __init__(self, *args):
        if len(args) == 3:
            super(WorkDate, self).__init__(args[0], args[1], args[2])
        elif len(args) == 1:
            self.year = args[0].year
            self.month = args[0].month
            self.day = args[0].day

【问题讨论】:

  • 如果骗子对您没有帮助,请告诉我们如何以及为什么。
  • @cᴏʟᴅsᴘᴇᴇᴅ 无法理解为什么我无法在代码中使用日期对象进行初始化。当我尝试使用日期对象构造时,它说 需要一个整数

标签: python python-2.7


【解决方案1】:

由于您想支持任意数量的参数,请接受*args

然后,在您的__init__ 中,将这些传递给基类的__init__

def __init__(*args):
    super(WorkDate, self).__init__(*args)

这是 Python 3 的版本,增加了对命名(关键字)参数 `**kwargs' 的支持:

def __init__(*args, **kwargs):
    super().__init__(*args, **kwargs)

【讨论】:

    猜你喜欢
    • 2018-09-26
    • 2021-10-16
    • 2016-02-03
    • 2018-12-23
    • 1970-01-01
    • 2016-10-12
    • 2013-01-13
    相关资源
    最近更新 更多