2017-05-03 21 views
0

クラスクラスのメソッドを静的クラス変数として格納し、子クラスに格納したり、辞書、それは、並べ替えまたはソートを使用して、クラスの属性ですか、より精巧なソート方法を記述する必要がありますか?継承されたクラスインスタンスのリストをクラス属性の辞書でソートするキー

私はPythonのnoobのだと私はラムダキー定義、itemgetter、およびattrgetterにしようと、ソートソート&を使用して「my_sorter」メソッドを記述しようとしたと私はへの構文で失敗していますかどうかわからないですしましたこれらの混在したネストされた構造にアクセスしたり、リスト内のエントリを意図的にシフトするためのより精巧なソートルーチンを書かなければ、それができないのであれば。

各子クラスには、その属性ディクショナリの「主キー」(つまり、ソートする一意の値)を識別する静的変数「mindex」があります。 my_sorter()メソッドの外観は?

class Engine(): 
    storage = [] 

    @classmethod 
    def my_sorter(cls): 
     #sort cls.storage by cls.mindex 

class Person(Engine): 
    mindex = 'Name' 

    def __init__(self, name): 
     self.attributes = { 
      'Name' : name, 
     } 

class Meeting (Engine): 
    mindex = 'Date' 

    def __init__(self, date): 
     self.attributes = { 
      'Date' : date, 
     } 
+2

_静的なクラス変数として格納されたクラスオブジェクトのリストを子クラスに、ソートまたはソートを使用するクラスの属性である辞書のキーによってソートするための基本クラスメソッドを書くことができますより洗練されたソート方法を書かなければならないのですか?_再度お願いします。 – Elmex80s

+0

あなたはこのメソッドが期待していることの例を提供することができますか? –

+0

'Person'と' Meeting'は同じ 'storage'リストをこのように共有しようとしています。それは本当にあなたが何をしたいのですか? (おそらく 'storage'をクラス属性にしてはいけません;それはグローバルな状態を変更する可能性があり、おそらくこれらのクラスの責任ではありません。また、中括弧が付いています。 – user2357112

答えて

1

あなたのオブジェクトがstorageリストで終わるが、あなたは正しく動作していることを持っていると仮定すると(とあなたが予期せずEngine.storageにすべての異なるサブクラスのオブジェクトのミックスを取得していない)されているかどこにも表示されません。 、並べ替えは非常に簡単にする必要があります。

@classmethod 
def my_sorter(cls): 
    return sorted(cls.storage, key=lambda obj: obj.attributes[cls.mindex]) 

は、私もあなたの PersonMeetingクラスは Engineのサブクラスであるべきかどうかについて少し懐疑的です。それは私にとってIS-Aのようなものではありません。もし私がプロジェクト全体のデザインを知っていれば、おそらくもっと意味があるでしょう。

関連する問題