我可以将类方法作为另一个类方法的默认参数吗
我想把一个类的方法作为默认参数传给另一个类的方法,这样我就可以把这个方法当作一个 @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
...