是否可以仅创建年份和月份的date对象?我不需要一天。
In [5]: from datetime import date
In [6]: date(year=2013, month=1)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-6-a84d4034b10c> in <module>()
----> 1 date(year=2013, month=1)
TypeError: Required argument 'day' (pos 3) not found
我在我的字典中使用日期对象作为键,1月20日必须与1月21日具有相同的密钥,因为它们在同一个月和一年中。
之前我使用了一个简单的整数作为月份数字。不幸的是,我也需要知道这一年!
答案 0 :(得分:13)
不,你不能这样做。对于您的用例,请改为使用元组:
key = (2013, 1)
由于您不需要对元组的值进行日期操作就足够了。
答案 1 :(得分:11)
作为其他答案的补充,您可以使用namedtuple。
from collections import namedtuple
MyDate = namedtuple('MyDate', ['month', 'year'])
dkey = MyDate(year=2013, month=1)
答案 2 :(得分:3)
return keys.Any(k => k.key == key && k.pressed);
答案 3 :(得分:2)
如果要使用datetime
,则必须遵循其属性。我在官方网站上引用它:
“理想化的天真日期,假设当前的公历 永远是,而且永远都是,实际上。属性:年,月, 和白天。“
所以,你不能忽视一天,记得分配。
答案 4 :(得分:0)
这实现了一个类似于datetime.date的类,但是您无需指定日期。即,它允许您“仅使用年和月创建日期对象。”
class Mdate(datetime.date):
""" A datetime.date where day doesn't matter. """
def __new__(cls, year, month):
"""Python calls __new__ instead of __init__ for immutable objects."""
return super().__new__(cls, year, month, 1)
def __repr__(self):
"""Because you're implementing __new__ you also need __repr__ or else you get
TypeError: __new__() takes 3 positional arguments but 4 were given."""
return '{0}({1}, {2}, 1)'.format(self.__class__.__name__, self.year, self.month)
def __reduce__(self):
"""You need __reduce__ to support pickling."""
return (self.__class__, (self.year, self.month))
我有大量的代码,其中月份的哪一天与日期无关,因此从日期构造函数中删除日期就可以澄清该代码。
样品使用:
d = Mdate(2020, 12)