如何在Python 3中将类实例变量作为方法参数访问?

时间:2019-05-13 16:11:45

标签: python python-3.x

假设我初始化以下类并尝试调用类似的方法:

class tester():
   def __init__(self, test):
    self.test=test
   def caller(self, test=test):
    return test
t=tester(6)
t.caller()
#error

我希望方法“调用方”中参数“ test”的默认arg是实例的self.test。相反,我收到未定义“测试”的错误。如果将test = test替换为test = self.test,则会收到未定义“ self”的错误。

按如下所示直接为类设置变量不会导致错误,但是当然只是从类而不是从实例返回“测试”:

class tester():
    test=1
    def __init__(self, test):
        self.test=test
    def caller(self, test=test):
        return test
t=tester(6)
t.caller()
#returns 1

如何专门将实例self.test用作该方法的默认arg?之所以要这样做,是因为我将创建很多函数,这些函数将共享与该类的每个实例一致的许多相同参数。方法参数可以默认为实例的默认值,而不是直接传递这些参数。

我不想直接在调用程序中直接访问实例变量,而是依赖默认方法参数的原因是,因为有时我希望可以选择使用不同的值来调用这些函数。

1 个答案:

答案 0 :(得分:3)

在类定义时会评估默认参数值,因此无法定义默认的每个实例。在类定义时,将使用单个默认值创建该方法对象。

实现所需目标的典型方法如下:

def caller(self, test=None):
    if test is None
        test = self.test
    ...