Ответ Claudiu корректен, но можно также обмануть путем получения имени класса от self
аргумент. Это даст вводящие в заблуждение операторы журнала в случаях наследования, но скажет Вам класс объекта, метод которого называют. Например:
from functools import wraps # use this to preserve function signatures and docstrings
def logger(func):
@wraps(func)
def with_logging(*args, **kwargs):
print "Entering %s.%s" % (args[0].__class__.__name__, func.__name__)
return func(*args, **kwargs)
return with_logging
class C(object):
@logger
def f(self):
pass
C().f()
, Поскольку я сказал, это не будет работать правильно в случаях, где Вы наследовали функцию от родительского класса; в этом случае Вы могли бы сказать
class B(C):
pass
b = B()
b.f()
и получить сообщение Entering B.f
, где Вы на самом деле хотите получить сообщение Entering C.f
, так как это - корректный класс. С другой стороны, это могло бы быть приемлемо, в этом случае я рекомендую этот подход по предложению Claudiu.
Extending your own Markov chain generator is probably your best bet, if you want "random" text. Generating something that has context is an open research problem.
Try (if you haven't):
Alternatively, you could use WordNet in two passes with your corpus:
There are quite a few problems with this approach too: for example, you need context from the surrounding words to know which homonym to choose. Looking up "quick" in wordnet yields the stuff about being fast, but also the bit of your fingernail.
I know this doesn't solve your requirement for a library or a tool, but might give you some ideas.
Что-то вроде этого генератора ipsum Lorem? Также есть ссылки на несколько API.