2017-05-03 5 views
0

클래스 클래스 메서드를 작성하여 정적 클래스 변수로 저장하거나 하위 클래스에 저장하거나 사전을 사용하여 클래스의 특성을 정렬 또는 정렬 또는 더 정교한 정렬 메서드를 작성해야합니까?클래스 속성 사전에 의해 상속 된 클래스 인스턴스 목록 정렬 Key

저는 python 멍청한 놈입니다. 나는 람다 키 정의, 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 관계처럼 보이지 않는다. 아마도 전체 프로젝트 디자인을 알고 있다면 더 이해할 수있을 것입니다.