gpt4 book ai didi

Python:在 __main__ 和 __init__ 中正确使用 Click

转载 作者:行者123 更新时间:2023-12-01 14:35:37 26 4
gpt4 key购买 nike

我一直在玩Click package我无法让以下代码片段正常工作。

import numpy as np
import click

@click.command()
@click.option('--get_print', default = True)

class CustomClass():

def __init__(s, get_print):

s.data = np.random.normal(0, 1, 10)
s.get_print = get_print

if s.get_print:
print("get_print =", s.get_print)

def print_mean(s):

print("Printing mean:")

mean_ = np.mean(s.data)

if s.get_print:

print(mean_)

if __name__ == '__main__':
CustomClass().print_mean()

看来 print_mean函数永远不会被调用。如果我注释掉@Click 装饰器,并手动设置 get_print=True , print_mean方法被调用就好了。

我的怀疑是@Click 以某种方式设置了 __main__所以当我这样做时 if __name__ == '__main__'它只是再次调用 Click - 但也许我错了?

无论哪种情况,当您想要 __init__ 时,使用 Click 的正确方法是什么?方法来继承所有选项,以及 if __name__ == '__main__'实际上能够调用类内部的函数,其中 __init__被定义为?

最佳答案

这只是为了说明我在评论中的意思。用 click 装饰一个函数函数并让该函数实例化您的类并执行您需要的任何成员函数。这是点击文档的建议:

import numpy as np
import click

class CustomClass:
def __init__(self, get_print):
self.data = np.random.normal(0, 1, 10)
self.get_print = get_print

if self.get_print:
print("get_print =", self.get_print)

def print_mean(self):
print("Printing mean:")
mean_ = np.mean(self.data)
if self.get_print:
print(mean_)

@click.command()
@click.option('--get_print', default=True)
def cli(get_print):
cc = CustomClass(get_print)
cc.print_mean()

if __name__ == '__main__':
cli()

...你可能想要 get_print成为默认标志 ​​ False :
@click.command()
@click.option('--get_print', default=False, is_flag=True, required=False)
def cli(get_print):
cc = CustomClass(get_print)
cc.print_mean()

关于Python:在 __main__ 和 __init__ 中正确使用 Click,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49011223/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com