【问题标题】:Python: Adding method for numberPython:为数字添加方法
【发布时间】:2013-04-09 05:20:06
【问题描述】:

对 Ruby 很感兴趣,我想在 Python 中处理日期时添加一些语法糖。 如何实现此方法:(3).days.ago() 或 (4).days.from_now()?

【问题讨论】:

  • 你有没有尝试过?
  • 我在github.com/gabrielfalcao/sure 中发现了类似的功能,但调查代码需要一些时间。我试图找到一种更快的方法来做到这一点。
  • 你想用python写ruby吗? :)
  • @Nozim:Python 不是 Ruby。你不能猴子补丁内置类型。聪明可能很酷,但可读性很重要。
  • 我知道 Python 不是 Ruby。如果您帮不上忙,请不要泛滥话题。将不胜感激。

标签: python date syntactic-sugar


【解决方案1】:

要创建接近您想要的语法,子类 int 以添加新方法(内置 int 类型是不可修改的,因此子类是唯一的选择扩展整数行为)。使用datetime module 中的timedelta 计算日期偏移量:

>>> from datetime import date, timedelta

>>> class Int(int):
        def days_ago(self):
            return date.today() - timedelta(days=self)
        def days_from_now(self):
            return date.today() + timedelta(days=self)

>>> Int(3).days_ago()
datetime.date(2013, 4, 5)
>>> Int(4).days_from_now()
datetime.date(2013, 4, 12)

【讨论】:

  • 我想用我的把这个函数包装起来
  • 问题在于在 python 中实现“(3).days.ago()”而不是获取日期。这只是这个技巧的应用之一。
  • @Nozim 您的需求与语言提供的内容不相交。
猜你喜欢
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-23
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
相关资源
最近更新 更多