2017-07-19 7 views
1

クラスを使用すると、クラスメソッド内の関数を属性 - 私はpythonでこのコードを使用しようとしているの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ではクラス/静的関数としてlambdaを宣言することはできません。あなたのコードはPython 3.xで動作するはずです。なぜこれを最初にやりたいのですか? – zwer

+0

私の元のコードでは、 "離れて行く"というサービス機能は、他の場所で定義されています。 apply関数はファクトリメソッドであり、この関数を使用します。 funcは外部から定義されます。 –

答えて

0

Doing apply(A)が動作します。ただし、funcで問題を解決する必要があります。

0

ここでは、いくつかの問題があります。あなたが達成しようとしていることは本当にわかりませんが、ドキュメントをもう一度見直さなければなりません。 まず、あなたのクラスを見てください。 関数内で関数を指定したい場合は、Pythonはdef func(args)メソッドを使用します。クラス内で使用する場合は、selfをパラメータとして使用する必要があります。ドキュメントから

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

    def f(self): 
     return 'hello world' 
また

lambda、言葉では、無名関数です。あなたの関数のパラメータ、およびあなたが返すようにしたいx**2ものになるだろう

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

x、その機能は4

が、それはいくつかを減らすことを願っていますが返されます:あなたはそれを定義するとき、あなたのような何かを行う必要があります混乱とあなたはより良い方法であなたのコードを記述します。がんばろう!

+0

私はコードを単純化して読みにくくなっていますが、私は上記のコメントで言及したように、このようにする理由があります。あなたは、この機能を別の方法で保持する方法を知っていますか? –

+0

あなたのエラーを見てください。私の答えで説明したように、ラムダ関数には2つの引数が必要です。そして、構文エラーのある単純化されたコードとは何の関係もありません。申し訳ありませんが、それだけでは不十分です。 –

+0

2つの議論について間違いがあると思います。私はクラス内のラムダの定義について正しいと思います。つまり、 'self'最初の引数が必要です。 –

関連する問題