-
[python] class instance의 변수로 정렬하기programming 공부/Python 2021. 5. 2. 15:52
게임 캐릭터를 만든다 생각하고 캐릭터를 만들어보자
123456789101112131415161718class charactor(object):def __init__(self,id,name,hp,mp,power):self.id = idself.name = nameself.hp = hpself.mp = mpself.power = powera = charactor(id=1, name='minho', hp=300, mp=300, power=10)b = charactor(id=2, name='bonggu', hp=300, mp=200, power=80)cs 캐릭터 두개중에 power가 높은순으로 정렬하고 싶다면 어떻게 해야할까?
정말 간단하게 해결할 수 있다
12345678910111213141516171819202122class charactor(object):def __init__(self,id,name,hp,mp,power):self.id = idself.name = nameself.hp = hpself.mp = mpself.power = powerdef __lt__(self,other):return self.power > other.powerclass stronger(object):def selectStronger(self,charactors):sortedCharactors = sorted(charactors)for i,v in enumerate(sortedCharactors):print(i,v.name,v.power)a = charactor(id=1, name='minho', hp=300, mp=300, power=10)b = charactor(id=2, name='bonggu', hp=300, mp=200, power=80)c = stronger()c.selectStronger([a,b])cs 캐릭터 클래스에 __lt__ 라는 메소드를 오버라이드 해서 비교할 값을 넣어주면 된다.
또는 sorted와 lambda를 활용하여 이렇게 할 수 있다.
1234567891011121314151617181920class charactor(object):def __init__(self,id,name,hp,mp,power):self.id = idself.name = nameself.hp = hpself.mp = mpself.power = powerclass 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)a = charactor(id=1, name='minho', hp=300, mp=300, power=10)b = charactor(id=2, name='bonggu', hp=300, mp=200, power=80)c = stronger()c.selectStronger([a,b])cs 또는 collector 모듈의 attrgetter 메소드를 활용할 수도 있다.
12345678910111213141516171819202122from operator import attrgetterclass charactor(object):def __init__(self,id,name,hp,mp,power):self.id = idself.name = nameself.hp = hpself.mp = mpself.power = powerclass 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)a = charactor(id=1, name='minho', hp=300, mp=300, power=10)b = charactor(id=2, name='bonggu', hp=300, mp=200, power=80)c = stronger()c.selectStronger([a,b])cs 'programming 공부 > Python' 카테고리의 다른 글
[Python] xlwings 로 큰 DataFrame 을 Excel 파일에 저장하기 (0) 2021.06.20 [python] 현재 사용자 이름 가져오기 (0) 2021.05.13 파이썬으로 이차원 배열 정렬하기 (0) 2021.04.24 Codility 배열문제 2번 (0) 2021.03.01 구글 이미지 크롤링 하기 (0) 2021.01.12