在类中的方法内的方法中使用选项(argparse)

2024-10-03 17:15:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有init和两个其他方法的类。在后两种方法中,是进行适当计算的附加方法。我想从命令行参数(使用argparse)访问和使用选项。当类中的方法中有方法时,使用选项的适当方式是什么? 我的代码结构是:

class P(object):
    def __init__(self, a, options):
        self.a = a
        self.b = None
        self.weight = None
        self.score = None
        self.Firstscore = None

    def calc_score(self, options):
        self.b = #Method to calculate a float, using the string self.a (raw value)

        def calc_weight(self, options):
            if float(self.b) > options.valueFromCommandLine:
                self.b_weight == 0
            else:
                self.b_weight == 100
            return self.b_weight

        self.weight = (self.calc_weight(self.b))
        self.score = self.weight * options.valueFromCommandLine
        self.Firstscore = self.score * constant

        return self.Firstscore

我继续得到 AttributeError:“P”对象没有属性“valueFromCommandLine”。在

当我改变调用选项的方法时,我得到 名称错误:未定义全局名称“b”,或

TypeError:“calc_weight”只接受1个参数(给定2个)

有人能帮助我使用合适的代码结构吗?我可以在类中的所有方法中使用选项?或者一个合适的结构在这种情况下会更好。在


Tags: 方法代码selfnone参数initdef选项
1条回答
网友
1楼 · 发布于 2024-10-03 17:15:35

AttributeError: 'P' object has no attribute 'valueFromCommandLine'错误意味着,作为options参数的calc_score的任何参数都没有此属性。

但是您没有告诉我们如何调用这个方法,甚至没有告诉我们如何首先创建P对象。

calc_weight是在calc_score中定义的函数。它不是P方法。所以你可以用calc_weight(self, options)来调用它。

我会把这部分改写为:

def calc_weight(b, value):
    # no use for self here
    if float(b) > value:
        b_weight == 0
    else:
        b_weight == 100
    return b_weight
self.weight = self.calc_weight(self.b, options.valueFromCommandLine)

你的问题不完整。理想情况下,它应该是一个可运行的剪辑-我们可以剪切和粘贴的东西,即使产生错误消息。

为什么要用argparse标记它(并在标题中使用它),但不给我们提供解析器定义?我怀疑optionsparser.parse_args()调用的结果,但在没有看到解析器定义或命令行的情况下,我不能确定。

您甚至可以定义calc_score来获取value,而不是整个{}对象(就像我对calc_weight所做的那样)。这看起来像是您在这里使用的options的唯一属性。

这大概就是我所期望的工作代码的样子:

^{pr2}$

相关问题 更多 >