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

  • iBand IguJoo

    iBand IguJoo

    25 AĞUSTOS 2006
  • LearnCode.academy

    LearnCode.ac

    20 Aralık 2012
  • steven johns

    steven johns

    11 Mart 2011