Использование Python Нажмите внутри класса - PullRequest
0 голосов
/ 28 января 2020

У меня есть старое приложение для карточек, которое я сделал, и которое я перепрофилировал для некоторого aws исследования по сертификации. Я написал в этом году go и пересмотрел этот код, и одно из этих изменений касалось использования click над argparse, но у меня возникают некоторые проблемы с использованием click. Мой код ниже (за исключением нескольких дополнительных функций):

Идея состоит в том, что load_deck() необходимо прочитать аргумент file. Я пытался это сделать, передав load_deck() аргумент file через main()

Наконец, выполнение этого кода говорит о том, что в вызове Flashcards().main(), main() отсутствует позиционный аргумент сам. Я думаю, что это проблема с тем, как я использую click.

import os
import random
import sys

import click
import keyboard
import ruamel.yaml


class Flashcards:
    """
    pass
    """

    def __init__(self):
        self.deck = ruamel.yaml.YAML()
        self.card = ['key', 'value']

    def load_deck(self, file):
        """
        pass
        """
        with open(file, mode='r') as deck:
            self.deck = self.deck.load(deck)

    @click.command()
    @click.option('-f', '--file', default='aws.yaml', help='specifies yaml file to use')
    @click.option('-r', '--reverse', default=False, help='displays values prompting user to guess keys')
    def main(self, file, reverse):
        """
        pass
        """
        self.load_deck(file)
        if reverse is True:
            self.deck = [
                [card[1], card[0]
                 ] for card in self.deck]

        os.system('clear')
        print('Press [SPACEBAR] to advance. Exit at anytime with [CTRL] + [C]\n'
              'There are {} cards in your deck.\n'.format(len(self.deck)))
        try:
            while True:
                self.read_card()
                self.flip_card()

        except KeyboardInterrupt:
            # removes '^C' from terminal output
            os.system('clear')
            sys.exit(0)


if __name__ == "__main__":
    Flashcards().main()

Программа читает файл yaml в следующем формате (ранее это было приложение spani sh flashcard):

bajar: to descend
borrar: to erase
contestar: to answer

1 Ответ

1 голос
/ 28 января 2020

Click не предназначен для такой работы, см., Например, эту проблему , которая также включает некоторые обходные пути в комментариях, если вы хотите go этот маршрут.

В вашем случае вы могли бы просто вывести main из класса и сделать так, чтобы он для вас Flashcards создал:

@click.etc.
def main(file, reverse):
    f = Flashcards()
    f.load_deck(file)
    # And so on, using 'f' instead of 'self'
...