我想扩展datetime.date类,为其添加一个名为status
的属性,该属性表示日期是工作日,行政非工作日,法院关闭日,......
我已经阅读了How to extend a class in python?,How to extend Python class init和Chain-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)
>>>
答案 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)
试试这个。