Как параметризировать docstrings в Python?
Зачастую автоматизаторы сталкиваются с проблемой вывода в логи нужной информации. Ко мне обратилась коллега с вопросом параметризации docstrings в python. Хочу просто подвести пунктиками, что можно, а что нельзя делать с docstrings.
- Вы можете указывать docstrings для модуля, класса, функции, метода
- Все описания docstrings идут сразу же после определения какой-то сущности, т.е. сразу после класса, функции и т.д.
- docstrings не могут быть параметризированны
- docstrings это только строка и не более того
Для того, чтобы вам продемонстрировать, как работает python docstrings посмотрите на этот код:
"""module docstring""" import unittest def function(): """function docstring""" pass class LoginTestCase(unittest.TestCase): """class docstring""" def testLogin(self): """method docstring""" pass if __name__ == "__main__": print __doc__ print function.__doc__ print LoginTestCase.testLogin.__doc__ print LoginTestCase.__doc__
Но все же, если вам например, нужно в docstrings что-то заменить, то вы наверное захотите сделать это так.
"""module docstring %s """ % myvariable
К сожалению, так работать код у вас не будет и когда вы будете обращаться к docstrings, то объект будет с типом None. И все же как туда вставить нужные данные для того, чтобы использовать docstrings в своих нуждах? Просто надо работать с строкой docstrings и все. Пример, вам нужно использовать docstrings метода для вывода чего-то там в лог. Как вы это можете сделать?
"""module docstring""" variable = "some string" import unittest def function(): """function docstring""" pass class LoginTestCase(unittest.TestCase): """class docstring""" def testLogin(self): """method docstring %%replace%%""" print LoginTestCase.testLogin.__doc__.replace(r"%%replace%%", variable) pass if __name__ == "__main__": import unittest unittest.main()
Т.е. вы указываете какую-то любую строку в docstrings, а потом ее заменяете на то что вам нужно в момент выполнения программы. Это конечно неидеальное решение потому как есть ряд побочных эффектов, но если вам действительно это необходимо, то можете пользоваться
Удачи и хорошего python программирования!
А также можно почитать:
Trackback from your site.
-
http://twitter.com/KatyaJetnet
-
-
http://poliarush.com/
-
-
http://poliarush.com/
Mykhailo Poliarush
| #
Добрый день, это вывод вы сделали по каким урокам?
Valerii Synenko
| #
Опис курсу шикарний, теми затронуті правильні, але ведення курсу: “це сюди, те туди, все ж ясно!”, пояснень = 0.
Igor Vlasuyk
| #
“Продолжительность 16 часов (2 дня)”
Это то есть 2 рабочих дня надо полностью быть на тренинге?
И на каком языке программирования будет практика?
Nataliia Koval
| #
Большое спасибо! С расписанием вроде разобралась.
Chmel Viktor
| #
Доброго дня