python datetime.date.today_python – 试图模拟datetime.date.today(),但没有...

有一些问题.

首先,你使用mock.patch的方式并不完全正确.当用作装饰器时,它仅在装饰函数内用Mock对象替换给定的函数/类(在本例中为datetime.date.today).因此,只有在你今天()中,datetime.date.today才会成为一个不同的功能,这似乎不是你想要的.

你真正想要的似乎更像是这样的:

@mock.patch('datetime.date.today')

def test():

datetime.date.today.return_value = date(2010, 1, 1)

print datetime.date.today()

不幸的是,这不起作用:

>>> test()

Traceback (most recent call last):

File "", line 1, in

File "build/bdist.macosx-10.6-universal/egg/mock.py", line 557, in patched

File "build/bdist.macosx-10.6-universal/egg/mock.py", line 620, in __enter__

TypeError: can't set attributes of built-in/extension type 'datetime.date'

这失败,因为Python内置类型是不可变的 – 有关更多详细信息,请参阅this answer.

在这种情况下,我会自己将datetime.date子类化并创建正确的函数:

import datetime

class NewDate(datetime.date):

@classmethod

def today(cls):

return cls(2010, 1, 1)

datetime.date = NewDate

现在你可以这样做:

>>> datetime.date.today()

NewDate(2010, 1, 1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值