Python:正确使用 Click 与 __main__ 和 __init__
Python: Correct use of Click with __main__ and __init__
我一直在研究 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 - 但也许我错了?
在任何一种情况下,正确的使用Click的方式是什么,当您希望__init__
方法继承所有选项时,if __name__ == '__main__'
真正能够在定义 __init__
的 class 中调用函数?
这只是为了说明我在评论中的意思。用 click
函数装饰一个函数,并让该函数实例化您的 class 并执行您需要的任何成员函数。这是点击文档的建议:
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()
我一直在研究 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 - 但也许我错了?
在任何一种情况下,正确的使用Click的方式是什么,当您希望__init__
方法继承所有选项时,if __name__ == '__main__'
真正能够在定义 __init__
的 class 中调用函数?
这只是为了说明我在评论中的意思。用 click
函数装饰一个函数,并让该函数实例化您的 class 并执行您需要的任何成员函数。这是点击文档的建议:
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()