Я хочу передать метод класса как и параметр по умолчанию к другому методу класса, так, чтобы я мог снова использовать метод как a @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: имя 'сам' не определяется
Вот моя установка:
class transmissionLine:
def electricalLength(self, l=l0, f=f0, gamma=self.propagationConstant, deg=False):
Но я хочу смочь звонить electricalLength
с другой функцией для гаммы, как:
transmissionLine().electricalLength (l, f, gamma=otherFunc)
Значения аргументов по умолчанию вычисляются во время определения функции, а не во время вызова функции. Так что нет, вы не можете. Однако вы можете сделать следующее:
def func2(self, aFunc = None):
if aFunc is None:
aFunc = self.func1
...
Вы должны написать это так:
class Foo(object):
@classmethod
def func1(cls, x):
print x
def func2(self, afunc=None):
if afunc is None:
afunc = self.func1
afunc(4)
Хотя было бы полезно, если бы вы дали немного больше информации о том, что вы пытаетесь сделать. Возможно, есть более элегантный способ сделать это без classmethods.
То, как вы пытаетесь, не сработает, потому что 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()