我可以将类方法和默认参数传递给另一个类方法

时间:2010-05-07 19:47:44

标签: python class

我想将类方法作为默认参数传递给另一个类方法,以便我可以将该方法重用为@classmethod

@classmethod
class foo:
    def func1(self,x):
        do somthing;
    def func2(self, aFunc = self.func1):
        # make some a call to afunc
        afunc(4)

这就是为什么在类func2中调用方法aFunc时默认为self.func1,但是我可以从类外部调用同一个函数并将其传递给另一个函数在输入端。

我明白了:

  

NameError:名称'self'未定义

这是我的设置:

class transmissionLine:  
    def electricalLength(self, l=l0, f=f0, gamma=self.propagationConstant, deg=False):  

但我希望能够使用不同的伽玛函数调用electricalLength,例如:

transmissionLine().electricalLength (l, f, gamma=otherFunc)

3 个答案:

答案 0 :(得分:10)

默认参数值是在函数定义期间计算的,而不是在函数调用期间计算的。所以不,你不能。但是,您可以执行以下操作:

def func2(self, aFunc = None):
    if aFunc is None:
        aFunc = self.func1
    ...

答案 1 :(得分:1)

你应该这样写:

class Foo(object):
    @classmethod
    def func1(cls, x):
        print x
    def func2(self, afunc=None):
        if afunc is None:
            afunc = self.func1
        afunc(4)

虽然如果你提供一些关于你想做什么的更多信息会有所帮助。没有类方法,可能有更优雅的方法来做到这一点。

答案 2 :(得分:1)

你尝试的方式不起作用,因为尚未定义食物。

class Foo:  
  @classmethod
  def func1(cls, x):
    print 'something: ', cls, x

def func2(cls, a_func=Foo.func1):
 a_func('test')

Foo.func2 = classmethod(func2)

Foo.func2()