Доступ к атрибутам документации класса для argparse - PullRequest
0 голосов
/ 11 октября 2018

В настоящее время я использую 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"])
...