使用 Python 在 class 内点击
Using Python Click within a class
我有一个我制作的旧抽认卡应用程序,我已将其重新用于一些 aws 证书研究。我在几年前编写并彻底修改了该代码,其中一项更改涉及使用 click
而不是 argparse
,但我在使用 click
时遇到了一些问题。我的代码如下(减去一些额外的功能):
想法是 load_deck()
需要读取 file
参数。我尝试这样做的方式是通过 main()
传递 load_deck()
file
参数
最后,运行 这段代码声明在 Flashcards().main()
调用中,main()
缺少位置参数 self。我认为这是我使用 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 文件(它以前是一个西班牙语抽认卡应用程序):
bajar: to descend
borrar: to erase
contestar: to answer
Click 并非自然而然地设计为以这种方式工作,例如 this issue 如果您想走那条路,其中还包括评论中人们提供的一些解决方法。
在您的情况下,您可以从 class 中提取 main
并让它为您实例化 Flashcards
:
@click.etc.
def main(file, reverse):
f = Flashcards()
f.load_deck(file)
# And so on, using 'f' instead of 'self'
我有一个我制作的旧抽认卡应用程序,我已将其重新用于一些 aws 证书研究。我在几年前编写并彻底修改了该代码,其中一项更改涉及使用 click
而不是 argparse
,但我在使用 click
时遇到了一些问题。我的代码如下(减去一些额外的功能):
想法是 load_deck()
需要读取 file
参数。我尝试这样做的方式是通过 main()
load_deck()
file
参数
最后,运行 这段代码声明在 Flashcards().main()
调用中,main()
缺少位置参数 self。我认为这是我使用 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 文件(它以前是一个西班牙语抽认卡应用程序):
bajar: to descend
borrar: to erase
contestar: to answer
Click 并非自然而然地设计为以这种方式工作,例如 this issue 如果您想走那条路,其中还包括评论中人们提供的一些解决方法。
在您的情况下,您可以从 class 中提取 main
并让它为您实例化 Flashcards
:
@click.etc.
def main(file, reverse):
f = Flashcards()
f.load_deck(file)
# And so on, using 'f' instead of 'self'