首页 > 解决方案 > 如何在 Python-3 的成员函数声明中使用类变量?

问题描述

我有一个类,它的声明有点像:

class foo:
    def __init__(self, a):
        self.a = a

我需要将成员变量对象“a”作为此类成员函数的默认参数传递,例如:

    def foo(self, x = self.a, y = -1):
        if (y == -1):
            bar()
        else:
            some_function(x)

但这会导致 self.a 出现错误“未定义自我”,这是可以理解的。

基本上,如果 x 等于 a,则 y = -1,这将导致“bar”被执行,并且让我免于检查另一部分中的 x 值。当然,这是该程序的一个更简单的版本,但本质上是相似的。检查 x = a 是否会很长,因为 x 本身就是一个复杂对象。我有什么简单的方法可以解决这个问题,比如将成员对象作为默认参数传递,还是我必须编写一个函数来比较这两个对象?

这个问题可能看起来很愚蠢,或者代码写得不好,但我只是一个没有经验的爱好者,我知道的不多。我只是在学习制作比“Hello World!”更复杂的程序。在 Python-3 中。

标签: pythonpython-3.xclassoop

解决方案


默认参数是在定义函数时评估的,而不是在调用它时评估的。定义类及其方法时没有self,因此不能将属性用作默认值。

当您希望动态计算默认值时,一般习惯用法是将计算放在函数本身中,并None用作默认值。

def foo(self, x = None, y = -1):
    if (y == -1):
        bar()
    else:
        if x is None:
            x = self.a
        some_function(x)

只要None不是参数的可能正常值,这将起作用。


推荐阅读