python - 是否可以使用 python 中 __init__ 中的 self.variable 值初始化方法的参数?

标签 python oop methods

我有一个带有 __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/

相关文章:

java - 如何调用 parking 票(parker, parker)?

javascript - jQuery 对话框异常错误

Java 方法 |传递值

python - Numpy:n 个向量的外积

python - model.summary() - 属性错误 : 'Tensor' object has no attribute 'summary'

C++ 对象列表不能正常工作

c# - 将带有对象的集合发送到另一个列表

java - 将 R 函数作为 Java 方法参数传递

python - Matplotlib:image.get_window_extent(renderer) 产生全零

python - 将字符串追加到Pandas数据框中不会产生结果