Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 24, 2014 19:50:10

alexzander77
От:
Зарегистрирован: 2009-01-27
Сообщения: 46
Репутация: +  1  -
Профиль   Отправить e-mail  

singleton и doctest в __init__

ДОбрый день господа.
Наткнулся на вещь, которую не могу понять с наскоку.

Имеется простой класс и доктест в __инит__

class Game:
    zone = None
    def __init__(self):
        """
        >>> g = Game()
        >>> z = g.set_zone()
        >>> z is g
        True
        >>> g.zone_number, g.x, g.y
        (0, 9, 4)
        """
он прекрасно работает.
если же я хочу сделать синглтон методом
def singleton(cls):
    instances = {}
    def getinstance():
        if cls not in instances:
            instances[cls] = cls()
        return instances[cls]
    return getinstance
@singleton
class Game:
    ....
, то PyCharm не видит доктест
Testing started at 7:47 PM ...
Empty test suite.

Вопрос - почему так может быть?



Офлайн

#2 Апрель 25, 2014 05:41:05

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

singleton и doctest в __init__

from functools import wraps
def my_decorator(f):
     @wraps(f) # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     def wrapper(*args, **kwds):
        print 'Calling decorated function'
        return f(*args, **kwds)
    return wrapper
@my_decorator
 def example():
     """Docstring"""
     print 'Called example function'
example()
example.__name__
example.__doc__



Офлайн

#3 Апрель 25, 2014 10:18:24

alexzander77
От:
Зарегистрирован: 2009-01-27
Сообщения: 46
Репутация: +  1  -
Профиль   Отправить e-mail  

singleton и doctest в __init__

Сенкс, Фиш.
Да, на подмену функции в обычном декораторе не обращал раньше внимания.

Если используются декораторы, то надеятся на доктесты, пожалуй, не стОит)

Про wraps, кроме доки, кратко и понятно прочитал на SO http://stackoverflow.com/questions/308999/what-does-functools-wraps-do





Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version