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

  • BMG Rentals Property Management

    BMG Rentals

    23 Mayıs 2011
  • TheTwistedFrequency

    TheTwistedFr

    26 NİSAN 2010
  • Yo Mama

    Yo Mama

    18 EYLÜL 2005