2017-07-19 31 views
1

我想在Python中使用此代碼:使用類中的方法屬性的功能 - 蟒蛇

class A: 
    func = lambda: "go away" 
    @classmethod 
    def apply(cls): 
     cls.func() 
A.apply() 

我收到此錯誤:

unbound method <lambda>() must be called with A instance as first argument (got nothing instead) 

我怎樣才能使它發揮作用?

+0

它是一個類方法 - 它需要是'func = lambda cls:...'... –

+0

您不能在Python 2.x中將lambdas聲明爲類/靜態函數。你的代碼應該在Python 3.x中工作,讓每個人都在看它。爲什麼你想這樣做呢? – zwer

+0

在我的原始代碼中,「走開」是服務功能,在其他地方定義。 apply函數是一個使用此函數的工廠方法。 func是從外部定義的。 –

回答

0

apply(A)的作品。但是,您也需要修復func的問題。

0

所以在這裏你有一堆的問題。我不太確定你想要達到的目標,但是你一定要再看看文檔。 首先,看看你的班級。 裏面你想指定一個函數,而Python使用的方法是def func(args)。如果你想在課堂上使用它,你應該使用self作爲參數。

從文檔:

class MyClass: 
    """A simple example class""" 
    i = 12345 

    def f(self): 
     return 'hello world' 

另外,lambda,在字是一個匿名函數。當你定義它,你應該這樣做:

s = lambda x: x**2 
s(2) 

x將是你的函數參數,x**2要返回的東西,所以該函數將返回4.

希望它會減少一些一團糟,你會以更好的方式編寫你的代碼。祝你好運!

+0

我簡化了我的代碼,所以它不會太多讀,但我有理由這樣做,正如我在上面的評論中提到的。你知道用不同的方式來保存這個功能嗎? –

+0

看看你的錯誤。 Lambda函數需要2個參數,正如我在答案中所解釋的。而且,對於語法錯誤的過於簡單的代碼沒有任何用處,對不起,這還不夠。 –

+0

我相信你錯了,關於2個參數。我想你對類中lambda的定義是正確的,需要一個'self'第一個參數。 –