Dynamic function docstring

前端 未结 3 1825
闹比i
闹比i 2020-12-20 13:53

I\'d like to write a python function that has a dynamically created docstring. In essence for a function func() I want func.__doc__ to be a descri

3条回答
  •  渐次进展
    2020-12-20 14:31

    (Python 3 solution)

    You could make use of Python's duck typing to implement a dynamic string:

    import time
    
    def fn():
        pass
    
    class mydoc( str ):
        def expandtabs( self, *args, **kwargs ):
            return "this is a dynamic strting created on {}".format( time.asctime() ).expandtabs( *args, **kwargs )
    
    fn.__doc__ = mydoc()
    
    help( fn )
    

    Caveats: This assumes that the help function is calling .expandtabs to get the text from the __doc__ object, which works in Python 3.7. A more robust solution would implement the other str methods in order to have our duck continue acting like a duck even if the help method changes. Also note that our mydoc class derives from str, this is because help, somewhat atypically, enforces strong typing by asserting isinstance(thing.__doc__, str). Like all solutions this is a bit hacky, but whether this is a problem largely depends on the full project requirements.

提交回复
热议问题