В настоящее время я использую argparse в классе, очень похожем на это:
class MyClass:
P_OPT = "my-opt"
"""This is an option to my script."""
P_OPT_HELP = "This is an option to my script"
"""Description for argparse"""
def __init__(self, **kwargs):
# do stuff here
pass
@classmethod
def parse_arguments(cls):
parser = argparse.ArgumentParser()
parser.add_argument('--' + cls.P_OPT, help=cls.P_OPT_HELP)
def main():
MyClass(**MyClass.parse_arguments())
Работает нормально, но у меня много вариантов и аргументов, существует избыточность между строкой документации P_OPT
и содержимымP_OPT_HELP
.Также я должен сделать строку документации для P_OPT_HELP
, иначе мой проектный линтер останется несчастным. PEP 224 решил, что не будет встроенного способа добраться до строки документации атрибутов класса и экземпляра во время выполнения.
Есть ли модуль или хитрый прием с питоном, чтобы сделать это?
То, что я до сих пор рассматриваю, - это просто использование dict
, оно не предотвращает избыточность, но не сильно загрязняет пространство имен моего класса:
P_OPT = {"name": "my-opt", "help": "This is an option to my script"}
"""This is an option to my script"""
И затем:
parser.add_argument('-' + P_OPT["name"], help=P_OPT["help"])