SORU
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ş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • echifitness

    echifitness

    9 Kasım 2008
  • Kai Moosmann

    Kai Moosmann

    5 Temmuz 2006
  • theKGB65

    theKGB65

    24 Aralık 2007