看起来您的代码提取包含某个类的方法,其完整定义未显示,并且您正在从另一个方法调用一个方法 (self._slow_trap_ramp(j))。当您调用一个方法时,Python 会在任何其他参数之前自动传递 self。所以你需要把def _slow_trap_ramp(self)改成def _slow_trap_ramp(self, j)。
根据评论更新
为了真正提供帮助,我们需要查看更多您正在编写的类,以及您正在调用的其他对象的一些信息。但是我会冒昧地猜测您的代码看起来像这样:
InstrumentsClass.py
class KeysightB2962A
def __init__(self):
...
def set_trap_ramp(self):
...
ExperimentsSubClasses.py
class FraunhoferAveraging
def __init__(self):
...
def slow_trap_ramp(self, j):
...
main.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()
如果是这样的话,那么这些是主要问题:
- Python 将
self 和j 传递给MyClass._slow_trap_ramp,但您只将其定义为接受self(如上所述),
- 您正在直接使用来自
KeysightB2962A 和FraunhoferAveraging 的类方法,而不是实例化类并使用实例的方法,并且
- 您正在返回对方法的引用,而不是调用方法。
您可以通过将代码更改为如下所示来修复所有这些问题(请参阅嵌入式 cmets):
新版 main.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()