在Python 3中扩展一个类并使用__init__构造它

时间:2014-07-14 12:45:49

标签: python class oop inheritance python-3.x

我想扩展datetime.date类,为其添加一个名为status的属性,该属性表示日期是工作日,行政非工作日,法院关闭日,......

我已经阅读了How to extend a class in python?How to extend Python class initChain-calling parent constructors in python,但我不太了解它,所以我是OOP的菜鸟。< / p>

>>> import datetime
>>> class Fecha(datetime.date):
        def __init__(self, year, month, day, status):
            super(Fecha, self).__init__(self, year, month, day)
            self.status = status

>>> dia = Fecha(2014, 7, 14, 'laborable')
Traceback (most recent call last):
  File "<pyshell#35>", line 1, in <module>
    dia = Fecha(2014, 7, 14, 'laborable')
TypeError: function takes at most 3 arguments (4 given)
>>> 

2 个答案:

答案 0 :(得分:6)

datetime.date是一种不可变类型,这意味着您需要覆盖__new__ method而不是:

class Fecha(datetime.date):
    def __new__(cls, year, month, day, status):
        instance = super(Fecha, cls).__new__(cls, year, month, day)
        instance.status = status
        return instance

演示:

>>> import datetime
>>> class Fecha(datetime.date):
...     def __new__(cls, year, month, day, status):
...         instance = super(Fecha, cls).__new__(cls, year, month, day)
...         instance.status = status
...         return instance
... 
>>> dia = Fecha(2014, 7, 14, 'laborable')
>>> dia.status
'laborable'

答案 1 :(得分:-1)

问题在于超级电话

super(Fecha, self).__init__(year, month, day)

试试这个。