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

  • Floortile83

    Floortile83

    16 Ocak 2010
  • GWTLecturer

    GWTLecturer

    18 EKİM 2012
  • Shameless Maya

    Shameless Ma

    24 Mayıs 2012