python - 如何在 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 中。
解决方案
默认参数是在定义函数时评估的,而不是在调用它时评估的。定义类及其方法时没有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
不是参数的可能正常值,这将起作用。