Могу ли я передать метод класса как и аргумент по умолчанию другому методу класса - PullRequest
6 голосов
/ 07 мая 2010

Я хочу передать метод класса как и аргумент по умолчанию другому методу класса, чтобы я мог повторно использовать метод как @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 ]

10 голосов
/ 07 мая 2010

Значения аргумента по умолчанию вычисляются во время определения функции, а не во время вызова функции. Так нет, ты не можешь. Однако вы можете сделать следующее:

def func2(self, aFunc = None):
    if aFunc is None:
        aFunc = self.func1
    ...
1 голос
/ 08 мая 2010

То, как вы пытаетесь, не сработает, потому что 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()
1 голос
/ 07 мая 2010

Вы должны написать это так:

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

Хотя было бы полезно, если бы вы дали немного больше информации о том, что вы пытаетесь сделать. Вероятно, есть более элегантный способ сделать это без методов класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...