ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [python] class instance의 변수로 정렬하기
    programming 공부/Python 2021. 5. 2. 15:52

    게임 캐릭터를 만든다 생각하고 캐릭터를 만들어보자

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    class charactor(object):
        def __init__(self,id,name,hp,mp,power):
            self.id = id
            self.name = name
            self.hp = hp
            self.mp = mp
            self.power = power
     
    = charactor(id=1, name='minho', hp=300, mp=300, power=10)
    = charactor(id=2, name='bonggu', hp=300, mp=200, power=80)

    cs

     

    캐릭터 두개중에 power가 높은순으로 정렬하고 싶다면 어떻게 해야할까?

    정말 간단하게 해결할 수 있다

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    class charactor(object):
        def __init__(self,id,name,hp,mp,power):
            self.id = id
            self.name = name
            self.hp = hp
            self.mp = mp
            self.power = power
        def __lt__(self,other):
            return self.power > other.power
     
    class stronger(object):
        def selectStronger(self,charactors):
            sortedCharactors = sorted(charactors)
            for i,v in enumerate(sortedCharactors):
                print(i,v.name,v.power)
            
     
    = charactor(id=1, name='minho', hp=300, mp=300, power=10)
    = charactor(id=2, name='bonggu', hp=300, mp=200, power=80)
    = stronger()
    c.selectStronger([a,b])
     
    cs

    캐릭터 클래스에 __lt__ 라는 메소드를 오버라이드 해서 비교할 값을 넣어주면 된다.

    또는 sorted와 lambda를 활용하여 이렇게 할 수 있다.

     

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    class charactor(object):
        def __init__(self,id,name,hp,mp,power):
            self.id = id
            self.name = name
            self.hp = hp
            self.mp = mp
            self.power = power
     
    class stronger(object):
        def selectStronger(self,charactors):
            sortedCharactors = sorted(charactors,key=lambda x : x.power,reverse=True)
            for i,v in enumerate(sortedCharactors):
                print(i,v.name,v.power)
            
     
    = charactor(id=1, name='minho', hp=300, mp=300, power=10)
    = charactor(id=2, name='bonggu', hp=300, mp=200, power=80)
    = stronger()
    c.selectStronger([a,b])
     
    cs

     

    또는 collector 모듈의 attrgetter 메소드를 활용할 수도 있다.

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    from operator import attrgetter
     
    class charactor(object):
        def __init__(self,id,name,hp,mp,power):
            self.id = id
            self.name = name
            self.hp = hp
            self.mp = mp
            self.power = power
     
    class stronger(object):
        def selectStronger(self,charactors):
            sortedCharactors = sorted(charactors,key=attrgetter('power'),reverse=True)
            for i,v in enumerate(sortedCharactors):
                print(i,v.name,v.power)
            
     
    = charactor(id=1, name='minho', hp=300, mp=300, power=10)
    = charactor(id=2, name='bonggu', hp=300, mp=200, power=80)
    = stronger()
    c.selectStronger([a,b])
     
    cs

    댓글

Designed by Tistory.