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