如何在Python中模拟“+”运算符(特别是datetime.date + datetime.timedelta)

2024-04-30

我已经解决了 Django 中的一些日期模拟问题,并且最后的障碍(我希望)是以下情况。我有一个 FakeDate 类,它派生于datetime.date,它嘲笑了。

FakeDate 类按预期工作,但是在添加datetime.timedelta到 FakeDate,因为它返回一个真实的datetime.date,而不是模拟。这很重要,因为在第三方库的其他地方有一个isinstance(value, datetime.date)检查,使用 timedelta 时总是会失败。

>>> import mock
>>> import datetime
>>>
>>> class FakeDate(datetime.date):
...     @classmethod
...     def today(cls):
...         return cls(1999, 12, 31)
...
>>> FakeDate.today()
FakeDate(1999, 12, 31)
>>> FakeDate(2000, 1, 1)
FakeDate(2000, 1, 1)
>>> FakeDate(1999, 12, 31) + datetime.timedelta(days=1)
datetime.date(2000, 1, 1)

我希望 FakeDate + timedelta 添加返回一个 FakeDate 对象而不是 datetime.date 对象 - 我想这涉及以某种方式修补 timedelta - 但我如何/在哪里可以做到这一点?


Add a __add__方法给你的FakeDate() class:

class FakeDate(datetime.date):
     @classmethod
     def today(cls):
         return cls(1999, 12, 31)
     def __add__(self, other):
         res = super(FakeDate, self).__add__(other)
         return type(self)(res.year, res.month, res.day)

Demo:

>>> class FakeDate(datetime.date):
...      @classmethod
...      def today(cls):
...          return cls(1999, 12, 31)
...      def __add__(self, other):
...          res = super(FakeDate, self).__add__(other)
...          return type(self)(res.year, res.month, res.day)
... 
>>> FakeDate.today() + datetime.timedelta(days=1)
FakeDate(2000, 1, 1)

请注意,您可以简单地将实际添加委托给datetime.date在这里上课;我们需要做的就是将结果转换回FakeDate()实例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Python中模拟“+”运算符(特别是datetime.date + datetime.timedelta) 的相关文章

随机推荐

  • 博客的 mongodb 架构设计

    您将如何为具有基于文档的数据库 mongodb 的类似博客的网站设计架构 该站点具有以下对象 用户 文章 评论 用户可以向文章添加评论 每个用户还可以为每个评论投票一次 我希望能够有效地执行这些查询 1 获取文章A 文章A的评论以及每个评论
  • 从 R 中的选项卡式文本创建树形图

    我想制作以下数据的树 流程图 并用制表符正确缩进 Vertebrates fish goldfish clownfish amphibian frog toad reptiles snake lizard turtle tortoise b
  • python kivy在矩形内添加文本

    如何在矩形内添加文本 我使用下面的代码并在画布内添加了一个标签 希望它能显示在矩形内 import kivy from kivy app import App from kivy uix anchorlayout import Anchor
  • 如何编写看起来像方法的 lambda 表达式?

    我一直在疯狂地试图解决这个问题 考虑以下代码 我假设已定义前向引用 Signature representing a pointer to a method call typedef void MyClass MyMethod int cl
  • Spark超时可能是由于HDFS中文件超过100万个的binary Files()

    我正在通过以下方式读取数百万个 xml 文件 val xmls sc binaryFiles xmlDir 该操作在本地运行良好 但在纱线上失败并显示 client token N A diagnostics Application app
  • 显示错误后如何隐藏错误提供程序?

    我有一个问题 也许有人可以帮助我 你知道在这个程序中制作的错误被删除后 如果没有更多错误 图标 错误提供程序 消失 但它出现了 该怎么办 请原谅我的语法错误 bool IsValidated true will be checked on
  • 如何让 Android 设备启动并跳过屏幕锁定

    如题 我可以唤醒手机并跳过屏幕锁定吗 我想编写一个基于闹钟的应用程序 当时间到了时 即使手机处于睡眠状态 该应用程序也应该检测到后台的某些内容 当检测到某些东西时 手机应该自动唤醒 跳过屏幕锁定 并显示图片 开始新的活动 有人能给我一些关于
  • jQuery UI 对话框始终位于右上角

    我试图将对话框放置在锚标记的右侧 但没有成功 我检查了解决方案jQuery UI 对话框定位 https stackoverflow com questions 744554 jquery ui dialog positioning似乎都不
  • 如何在eclipse中生成java项目的可执行文件[重复]

    这个问题在这里已经有答案了 我正在尝试为我的 Java 应用程序创建一个可执行文件 但我不知道该怎么做 我知道如何生成可执行 jar 文件 但我想制作一个可执行应用程序 我正在使用 eclipse indigo 来制作 java 应用程序并
  • 在 PHP 中生成 SAN CSR

    我目前正在编写一个脚本 通过 Web 界面生成 CSR 以便提交以生成证书 我当前的问题是我想生成 SAN 证书 但找不到有关如何添加subjectAlternateName到生成的证书请求中 我当前的代码是 private key ope
  • 更改提交按钮行为的更合适的方法[重复]

    这个问题在这里已经有答案了 是的 我以前问过这个here https stackoverflow com questions 62268305 whitespace in wrapped form element但没有一个答案是合适的 或者
  • 在 LaTeX Beamer 中更改 \textbullet 的颜色

    我不想使用 Beamer 的标准蓝色主题 我想用beaver 这是深红色 一切看起来都不错 除了如果我使用itemize要点仍然是蓝色的 有没有一种好方法可以让项目符号随我使用的颜色主题而变化 如果我选择淡黄色主题 我希望子弹也会变成黄色
  • 无法通过在 C# 中调用 powershell 安装 NuGet 提供程序

    我从下面的 C 方法调用 powershell cmdlet 它在 Install Module Name CosmosDb 行失败 并出现以下错误 使用 2 个参数调用 ShouldContinue 时出现异常 一个命令 提示用户失败 因
  • 扩展 EditText 以赋予其额外的“默认”功能的正确方法是什么

    我想知道是否可以向 EditText 添加功能 以便当我在布局 xml 中包含新扩展的字段时 我不必向 Activity 类添加任何代码以使其以特定方式运行 例如 我想创建一个 EditPhone 字段 它只是一个 EditText 它具有
  • React:如何组合Material-UI中标记的多种样式

    我有两种风格 一件事包含在特定组件中 另一件事包含在全局组件中 例如 假设我们有以下树 index tsx App tsx globalConstants ts 在 globalConstants ts 中 import Theme mak
  • 如何在vs2008中使用C#使用卷影复制

    我想制作一个使用卷影复制服务进行备份 恢复的 C 应用程序 如何从 C 访问 VSS API 查看AlphaVSS https github com alphaleonis AlphaVSS 我相信这正是医生所吩咐的
  • 在 Ruby 中,有没有办法轻松删除数组中的 1 个匹配项?

    在 Ruby 中 数组减法或reject gt gt 1 3 5 7 7 7 gt 1 3 5 gt gt 1 3 5 7 7 reject i i 7 gt 1 3 5 将删除数组中的所有条目 是否有一种方法可以轻松删除仅出现 1 次的情
  • 在客户端处理模式下使用 jQuery DataTables 对字母数字数据进行排序

    所以我有一个包含字母数字值的表 例如 8980 1100 A1100 BA200 我希望它首先以数字顺序方式对其进行排序 然后以字母数字方式进行排序 例如 1000 8980 A1100 BA200 在这里找到了一些帮助 但不完全是我正在寻
  • 为什么空切片有 24 个字节?

    我想了解创建空切片时会发生什么make int 0 我执行此代码进行测试 emptySlice make int 0 fmt Println len emptySlice fmt Println cap emptySlice fmt Pri
  • 如何在Python中模拟“+”运算符(特别是datetime.date + datetime.timedelta)

    我已经解决了 Django 中的一些日期模拟问题 并且最后的障碍 我希望 是以下情况 我有一个 FakeDate 类 它派生于datetime date 它嘲笑了 FakeDate 类按预期工作 但是在添加datetime timedelt