我试图扩展^{arrow
案例强调了这一点——这意味着这个问题可能比仅限于arrow
更一般)。你知道吗
arrow
基本用法:
>>> import arrow
>>> arrow.now()
<Arrow [2016-11-19T15:13:23.897484+01:00]>
>>> arrow.get("2016-11-20")
<Arrow [2016-11-20T00:00:00+00:00]>
我想添加一个when
方法,它将返回'today'、'tomorrow'或'later'。我第一次尝试这个:
import arrow
class MyArrow(arrow.Arrow):
def __init__(self, *args):
arrow.Arrow.__init__(self, *args)
def when(self):
now = arrow.now()
end_today = now.ceil('day')
end_tomorrow = now.replace(days=+1).ceil('day')
start_tomorrow = now.replace(days=+1).floor('day')
if self < end_today:
return 'today'
elif self < end_tomorrow:
return 'tomorrow'
else:
return 'later'
if __name__ == "__main__":
tom = MyArrow.now().replace(days=+1)
print(tom.when())
someday = MyArrow.get("2016-11-19")
结果是
tomorrow
Traceback (most recent call last):
File "D:/Dropbox/dev/domotique/testing/myarrow.py", line 23, in <module>
someday = MyArrow.get("2016-11-19")
AttributeError: type object 'MyArrow' has no attribute 'get'
所以第一部分起作用了,但是get()
失败了。我看了the sources,get
在ArrowFactory
。如果我扩展ArrowFactory
而不是Arrow
,我将能够使用get
,但不再使用now()
。你知道吗
这就是我困惑的地方:上面的“基本用法”表明我可以调用arrow.whatever_is_available
,不管它是在类Arrow
还是ArrowFactory
中定义的。
这是怎么回事?
如何添加when
方法以保持arrow
的其余部分(及其所有方法)不变?你知道吗
是Arrow文档中突出显示的features之一,它实际演示了exactly how to create and use a custom ^{} subclass :
然后可以在
factory
上调用.get
、.now
和.utcnow
方法,并使用其.when
方法获取自定义子类。你知道吗这是特定于处理Arrow及其模块级API的;对于更简单的模块,您可以直接对它们的类进行子类化。你知道吗
相关问题 更多 >
编程相关推荐