2016-03-09 7 views
6

PyLintは私のクラスメソッドの1つがメソッドである必要はないと教えてくれましたが、どのクラス属性も使用していないのでクラスの関数である可能性があります。それは私が「悪い」と思ったことをしましたが、おそらく彼らはPythonicです。 Pythonが私たちに求めているコードは次のとおりですか? ParentClass.eventはそのコールバックにtextを発するが、我々はだけではなく、その印刷"hello"を無視しますクラスメソッドの内部で関数を定義するのは難しいですか?

class TestClass(ParentClass): 
    def __init__(self): 
     def callbackfunction(text): 
      print("hello") 
     ParentClass.map_event_to_callback(ParentClass.event, callbackfunction) 

。さらに簡単:私は__init__後約textまたはprinthelloを気にしないと仮定し

class TestClass(): 
    def __init__(self, text): 
     def printhello(text): 
      print("hello") 
     printhello(text) 

+7

いや、それは大丈夫です:あなたが実行する必要があるすべては一つの式であれば

あなたはlambdaを使用することができます。 'ラムダ 'も使うことができます。 –

+2

メソッド内の関数は、実際には関数内の関数と変わりません。場合によっては意味をなさないこともありますが、そうでない場合は、使用しない理由はありません。 –

+0

ありがとう、@MartijnPietersと@TomKarzes!コールバック関数をクラス '' __init__'の中に置くと、私は汚い気分になりましたが、回避する技術的な理由があるかどうかは分かりませんでした。 @MartijnPieters、もし私がそれを選択できるあなたのコメントをあなたのコメントを作る。 –

答えて

1

コールバックのネストされた関数を作成するだけです。それは、その関数に親関数内の任意のローカルへのアクセスを(クロージャとして)提供します。

class TestClass(ParentClass): 
    def __init__(self): 
     ParentClass.map_event_to_callback(ParentClass.event, lambda text: print("hello")) 
関連する問題