如何在另一个脚本的主脚本中使用两个助手函数

2024-05-13 21:32:27 发布

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

TypeError:\u slow\u trap\u ramp()接受1个位置参数,但给出了2个

def demag_chip(self):
    coil_probe_constant = float(514.5)
    field_sweep = [50 * i * (-1)**(i + 1) for i in range(20, 0, -1)] #print as list
    for j in field_sweep:
        ramp = self._slow_trap_ramp(j)

def _set_trap_ramp(self):
    set_trap_ramp = InstrumentsClass.KeysightB2962A.set_trap_ramp
    return set_trap_ramp

def _slow_trap_ramp(self):
    slow_trap_ramp = ExperimentsSubClasses.FraunhoferAveraging.slow_trap_ramp
    return slow_trap_ramp

Tags: inselffieldfor参数returndefslow
2条回答

您的代码提取似乎包含某个类的方法,该类的完整定义未显示,您正在从另一个方法(self._slow_trap_ramp(j))调用一个方法。调用方法时,Python会自动在任何其他参数之前传递self。所以你需要把def _slow_trap_ramp(self)改成def _slow_trap_ramp(self, j)。你知道吗

根据评论更新

为了提供真正的帮助,我们需要查看您正在编写的类的更多信息,以及您正在调用的其他对象的一些信息。但我要冒险去猜测你的代码是这样的:

仪表等级

class KeysightB2962A
    def __init__(self):
        ...
    def set_trap_ramp(self):
        ...

<强>E实验类.py

class FraunhoferAveraging
    def __init__(self):
        ...
    def slow_trap_ramp(self, j):
        ...

当前版本主.py

import InstrumentsClass, ExperimentsSubClasses
class MyClass
    def __init__(self)
        ...
    def demag_chip(self):
        coil_probe_constant = float(514.5)
        field_sweep = [50 * i * (-1)**(i + 1) for i in range(20, 0, -1)] #print as list
        for j in field_sweep:
            ramp = self._slow_trap_ramp(j)
    def _set_trap_ramp(self):
        set_trap_ramp = InstrumentsClass.KeysightB2962A.set_trap_ramp
        return set_trap_ramp
    def _slow_trap_ramp(self):
        slow_trap_ramp = ExperimentsSubClasses.FraunhoferAveraging.slow_trap_ramp
        return slow_trap_ramp

if __name__ == "__main__":
    my_obj = MyClass()
    my_obj.demag_chip()

如果是这样的话,那么主要问题是:

  1. Python将selfj传递给MyClass._slow_trap_ramp,但您只将其定义为接受self(如上所述)
  2. 您直接使用来自KeysightB2962AFraunhoferAveraging的类方法,而不是实例化类和使用实例的方法,并且
  3. 您正在返回对方法的引用,而不是调用方法。你知道吗

您可以通过将代码更改为如下所示来修复所有这些问题(请参见嵌入的注释):

新版主.py

import InstrumentsClass, ExperimentsSubClasses
class MyClass
    def __init__(self)
        # create instances of the relevant classes (note parentheses at end)
        self.keysight = InstrumentsClass.KeysightB2962A()
        self.fraun_averaging = ExperimentsSubClasses.FraunhoferAveraging()
    def demag_chip(self):
        coil_probe_constant = float(514.5)
        field_sweep = [50 * i * (-1)**(i + 1) for i in range(20, 0, -1)] #print as list
        for j in field_sweep:
            ramp = self._slow_trap_ramp(j)
    def _set_trap_ramp(self):
        # call instance method (note parentheses at end)
        return self.keysight.set_trap_ramp()
    def _slow_trap_ramp(self, j): # accept both self and j
        # call instance method (note parentheses at end)
        return self.fraun_averaging.slow_trap_ramp(j)

if __name__ == "__main__":
    my_obj = MyClass()
    my_obj.demag_chip()

错误很简单。你知道吗

ramp = self._slow_trap_ramp(j)

使用参数j调用此方法,但该方法不接受参数(除了用于传递对象的self)。你知道吗

如果要传递参数,请重新定义方法以接受参数:

def _slow_trap_ramp(self, j):

相关问题 更多 >