Кто написал эту программную поговорку? & ldquo; Всегда кодируйте так, как будто парень, который в конечном итоге будет поддерживать ваш код, будет жестоким психопатом, который знает, где вы живете. & rdquo; [закрыто]

Есть несколько проблем.

Прежде всего, способ, которым вы используете mock.patch, не совсем прав. При использовании в качестве декоратора он заменяет данную функцию / класс (в данном случае datetime.date.today) объектом Mock только внутри декорированной функции . Таким образом, только в пределах вашей today() будет datetime.date.today быть другой функцией, которая, кажется, не является тем, что вы хотите.

То, что вы действительно хотите, похоже, больше похоже на это:

@mock.patch('datetime.date.today')
def test():
    datetime.date.today.return_value = date(2010, 1, 1)
    print datetime.date.today()

К сожалению, это не сработает:

>>> test()
Traceback (most recent call last):
  File "", line 1, in 
  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'

Это не работает, потому что встроенные типы Python неизменяемы - см. этот ответ для более подробной информации.

В этом случае я буду подклассифицировать datetime.date самостоятельно и создать правильную функцию:

import datetime
class NewDate(datetime.date):
    @classmethod
    def today(cls):
        return cls(2010, 1, 1)
datetime.date = NewDate

И теперь вы можете сделать:

>>> datetime.date.today()
NewDate(2010, 1, 1)

140
задан John Vandenberg 6 October 2016 в 06:02
поделиться

2 ответа

Я думал, что исследование ChrisW было правильным, и попытался подтвердить его, сделав то же самое. Я нашел имя Джона Вудса в 1991 году в этой теме: Использование оператора запятой

Билл Митчелл Просмотреть профиль Подробнее варианты 26 сен 1991, 1:57 утра В статья < 5 ... @ ksr.com > j ... @ ksr.com (Джон Ф. Вудс) пишет:

[...] Всегда кодируйте так, как будто парень, который в конечном итоге будет поддерживать ваш код, будет жестокий психопат, который знает, где вы живете. Код для удобочитаемости.

Черт возьми!

Так может быть, Джон Вудс?

22 августа 2014 г .: Ссылка обновлена.

122
ответ дан 23 November 2019 в 22:38
поделиться

Его самое раннее появление в Группах Google не упоминается в подписи к сообщению Мартина Голдинга в 1994 году.

10
ответ дан 23 November 2019 в 22:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: