我有一个带有 __init__
方法的类,我在其中定义了一些变量,以及一个方法 AddSignalSpectrum
:
class SpectrumGraph:
# Properties
def __init__(self):
self.PlotHeight= 300
self.PlotWidth = 800
self.xRangeMin = -10
self.xRangeMax = 10
self.yRangeMin = -0.1*(self.xRangeMax - self.xRangeMin)
self.yRangeMax = 0.9*(self.xRangeMax -self.xRangeMin)
def AddSignalSpectrum(
self,
name,
Type,
CenterPosition,
Bandwidth=2,
Height = self.yRangeMax*0.8,
Color = "#0000FF",
LineWidth = 2,
AbscissaSymbol = '$\omega_0$',
ShowLegend = False):
# Rest of the method
我想要的是向该方法提供 self.yRangeMax*0.8 的默认值,但是当我这样做时,我收到一条错误,指出“self”未定义。我可以在方法内部使用 self 的属性,但它似乎不适用于方法定义的参数。我认为这是某种 namespace 问题,但找不到解决方法。可能我只是不确定到底要搜索什么。
最佳答案
这不是初始化,而是为函数参数设置默认值。问题与命名空间无关,而与绑定(bind)有关。
这些值提前确定一次,并作为函数(或方法)对象的一部分存储。此处无法使用 self
参数的属性,因为发生这种情况时没有。和普通函数是一样的:
def example(a, b=a+3): # doesn't work; `a` is not defined ahead of time
print(f'a={a} and b={b}')
此问题的正常解决方法是使用 None
作为默认值,然后在逻辑中显式检查这一点,并将 None
替换为所需的计算:
def example(a, b=None): # works
if b is None:
b = a + 3
print(f'a={a} and b={b}')
# and now we can call:
example(1) # 'a=1 and b=4'
关于python - 是否可以使用 python 中 __init__ 中的 self.variable 值初始化方法的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63095726/