2017-09-26 12 views
0

私はリストといくつかのブールメソッドを含むクラスを持っています。変数から新しいオブジェクトのメソッドを呼び出す

class Cls: 
    data = [] // populated in __init__() 


    def flag1(self): 
    def flag2(self): 
    def flag3(self): # these all return booleans, based on the data 

私は、いくつかの方法でデータを操作する新しいデータにフラグを適用し、そして結果の数を数えて、パラメータのフラグの一つを取って、より高いレベルの機能を作成したいです。以下のような

何か:

def hof(self, fn): 
    count = 0 
    for i in range(1, 10): 
    new_obj = Cls(self.data+i) 
    if new_obj.fn(): 
     count +=1 

は、静的メソッドにすべてのフラグを回すことなく、これを実現する方法はありますか?

=== 編集:非常にハック方法で、それが動作製:

class Cls: 
    data = [] 
    def __init__(self): 
    self.data = value 
    class flag1(self): 
    return True 
    class flag2(self): 
    return False 

    # The hackish part 
    flag_dict = { 
    1: flag1, 
    2: flag2, 
    } 
    def hof(self, flag): 
    count = 0 
    for i in range(1,10): 
     new_obj = Cls(self.data + [i]) 
     if self.flag_dict[flag](new_obj): 
     count +=1 
    return count 

しかし、それはハックのように思える、それはかなり理解できないのです。誰かがより良い方法を指摘できますか?

ありがとうございました。

+0

何を試しましたか?何が起こったのですか?私がここにいる間、あなたがクラスレベルの可変変数が '__init __()'に "populated"されていると言うときは、 "望ましい値に置き換えられました"という意味ですか?その場合、おそらく違うデフォルトを持つべきです。すべてのインスタンスが同じデータを持つことになりますか? – mwchase

+0

@mwchase、私は 'def __init __(self、value):self.data = value'のようなものを意味しました – pashadia

答えて

0

instance.hof(Cls.flag1)のような関数にメソッドを渡すだけで、内部的にはstaticメソッドにする必要はありませんが、if fn(new_obj):と書くことができます。

+0

これはうまくいくはずです。 – pashadia

関連する問題