19 Aralık 2010, Pazar
Python: alay datetime.tarih.() bugün ama çalışmıyor
Herkes bu işe yaramıyor bana söyleyebilir mi?
>>> import mock
>>> @mock.patch('datetime.date.today')
... def today(cls):
... return date(2010, 1, 1)
...
>>> from datetime import date
>>> date.today()
datetime.date(2010, 12, 19)
Belki birisi daha iyi bir yol önerebilir misin?
CEVAP
19 Aralık 2010, Pazar
Birkaç sorun var.
Öncelikle mock.patch
kullandığınız yol çok doğru değil. Bir dekoratör olarak kullanıldıĞında, Mock
bir nesne ile verilen fonksiyon/sınıf (bu durumda, datetime.date.today
) değiştirirsüslü işlevi içinde sadece. İstediğin gibi görünmüyor ki, sadece today()
datetime.date.today
içinde farklı bir işlevi olacak.
Gerçekten istediğin bu gibi görünüyor:
@mock.patch('datetime.date.today')
def test():
datetime.date.today.return_value = date(2010, 1, 1)
print datetime.date.today()
Ne yazık ki, bu işe yaramaz:
>>> test()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
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'
Bu Python yerleşik türleri sabit-daha fazla ayrıntı için this answer bakın çünkü başarısız olur.
Bu durumda, datetime sınıfı ederim.kendimi tarih ve doğru işlev oluşturun:
import datetime
class NewDate(datetime.date):
@classmethod
def today(cls):
return cls(2010, 1, 1)
datetime.date = NewDate
Ve şimdi yapabilirsiniz:
>>> datetime.date.today()
NewDate(2010, 1, 1)
Bunu Paylaş:
Tarih Python datetime dönüştürmek...
Nasıl tarih (python) datetime dönüştür...
Nasıl geçerli tarih datetime Python mo...
Datetime değeri almak için Nasıl.Pytho...
Python - yerel datetime UTC tarih dize...