我可以将类方法作为另一个类方法的默认参数吗

7 投票
3 回答
4551 浏览
提问于 2025-04-15 22:28

我想把一个类的方法作为默认参数传给另一个类的方法,这样我就可以把这个方法当作一个 @classmethod 来重复使用:

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

这就是为什么当在类 aFunc 中调用方法 func2 时,它默认使用 self.func1,但我可以从类外部调用这个方法,并传入一个不同的函数作为参数。

我遇到的问题是:

NameError: name 'self' is not defined

这是我的设置:

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

但我希望能够用一个不同的函数来调用 electricalLength,比如:

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

3 个回答

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

你现在的做法行不通,因为 Foo 还没有被定义。

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()
13

默认参数值是在定义函数的时候计算出来的,而不是在调用函数的时候。所以,答案是否定的,你不能这样做。不过,你可以尝试以下的方法:

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

撰写回答