[英]where is the documentation for the python argparse helpformatter class?
我已經找到了python argparse模塊的文檔,並且提到了formatter_class。 我在該頁面上看不到寬度參數或max_help_position之類的東西。 這些在哪里記錄?
Argparse使用輔助類argparse.helpformatter(),該類使用max_help_position
和width
參數(以及其他參數)。 看到這個出色的答案,它解釋了如何使用解釋lambda argparse.HelpFormatter(prog,width) 。
查找有關文檔的問題是因為HelpFormatter僅在其名稱的意義上是公開的。 它的所有方法都是私有的。
這取自您提供的文檔https://github.com/python/cpython/blob/2.7/Lib/argparse.py中鏈接的源代碼:
類HelpFormatter(object):
用於生成使用情況消息和參數幫助字符串的格式化程序。
僅此類的名稱被認為是公共API。 該類提供的所有方法均被視為實現細節。
因此argparse文檔本身是操作方法和正式API描述的組合。 通常,它描述了如何執行常見的解析任務。 盡管argparse由類組成,但文檔並未正式描述這些類及其子類和所有方法。 它不是參考API。
一種解決方法是找到另一種使用HelpFormatter類的服務,該服務可以更好地記錄其變量,例如Discord https://discordpy.readthedocs.io/en/rewrite/ext/commands/api.html#discord.ext中的服務.commands.HelpFormatter 。
希望這可以幫助。
更新
Discord更新了其鏈接,因此上述鏈接現在已斷開。 而是在WayBackMachine中找到它: https ://web.archive.org/web/20180306073319/https://discordpy.readthedocs.io/en/rewrite/ext/commands/api.html#discord.ext.commands.HelpFormatter
argparse
文檔比正式的模塊文檔更多地是通用用法手冊。 例如,它沒有列出所有(公共)類及其方法。 因此,對於更多自定義用途,您將必須查看代碼,幸運的是,該代碼位於一個文件argparse.py
。
幫助調用順序為:
parser.print_help
parser.format_help
parser._get_formatter
self.formatter_class(prog=self.prog)
在這種情況下,僅設置prog
參數; 其他值為默認值。
class HelpFormatter(object):
def __init__(self,
prog,
indent_increment=2,
max_help_position=24,
width=None):
因此,這些其他參數在__init__
中可用,但用戶不易訪問。
自定義_get_formatter
方法是自定義這些值的一種方法。 另一個是將HelpFormatter
子類HelpFormatter
。 也可能使用partial
在formatter_class
參數中設置這些值。
我看到@Magnus找到了關於該主題的較早答案。
因此,盡管有名稱,但formater_class
參數不必是類。 在Python duck_typing中,它必須是_get_formatter
可以使用的東西。 它可以是任何需要prog
參數的函數或lambda。
利用先前的答案:
f = lambda prog: argparse.HelpFormatter(prog, width=100)
f = functools.partial(argparse.HelpFormatter, width=100)
都可以用作:
parser = argparse.ArgumentParser(formatter_class=f)
讓我們看看是否可以說明argparse
如何使用formatter類。
print_usage
使用format_usage
( print_help
相似,但更長)
def format_usage(self):
formatter = self._get_formatter()
formatter.add_usage(self.usage, self._actions,
self._mutually_exclusive_groups)
return formatter.format_help()
使用上一個問題的解析器:
In [459]: p.print_usage()
usage: ipython3 [-h] [-f F] [-g [G [G ...]]] [-k [K [K ...]]]
我可以通過直接調用HelpFormatter
類來復制它:
In [460]: f = argparse.HelpFormatter(prog='foo')
In [461]: f.add_usage(p.usage, p._actions,p._mutually_exclusive_groups)
In [462]: print(f.format_help())
usage: foo [-h] [-f F] [-g [G [G ...]]] [-k [K [K ...]]]
如果我創建一個帶有width
參數的格式化程序, width
得到一些換行符:
In [463]: f = argparse.HelpFormatter(prog='foo',width=40)
In [464]: f.add_usage(p.usage, p._actions,p._mutually_exclusive_groups)
In [465]: print(f.format_help())
usage: foo [-h] [-f F] [-g [G [G ...]]]
[-k [K [K ...]]]
建議的lambda
(和變體)的目的是用自定義代碼替換[460]中的默認格式化程序創建。 formatter_class
參數使我們能夠做到這一點。 它比簡單的width
參數需要更多的Python知識,但最終為我們提供了更多的自定義功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.