Я могу передать метод класса как и параметр по умолчанию к другому методу класса

Я хочу передать метод класса как и параметр по умолчанию к другому методу класса, так, чтобы я мог снова использовать метод как 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)
6
задан bruntime 14 August 2017 в 22:37
поделиться

3 ответа

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

def func2(self, aFunc = None):
    if aFunc is None:
        aFunc = self.func1
    ...
11
ответ дан 8 December 2019 в 18:33
поделиться

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

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.

1
ответ дан 8 December 2019 в 18:33
поделиться

То, как вы пытаетесь, не сработает, потому что 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
ответ дан 8 December 2019 в 18:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: