class compare(str):
def __lt__(a, b):
return a+b > b+a
class Solution:
def largestNumber(self, nums: List[int]) -> str:
if len(nums) == 1:
return str(nums[0])
elif len(nums) == 0:
return ""
else:
lst = [str(x) for x in nums]
sorted_lst = sorted(lst, key=compare)
if list(set(sorted_lst)) == ['0']:
sorted_lst = ['0']
return ''.join(sorted_lst)
파이썬에서 __lt__ 메서드는
클래스가 비교 연산자(less than)를 정의하기 위해 사용되는 특수한 메서드이다.
이 메서드를 정의하면 해당 클래스의 객체 간에 '<' 연산자를 사용할 수 있게 된다.
__lt__ 메서드는 두 개의 인자를 받아야 한다.
첫번째 인자는 비교 대상 객체 자체이고,
두번째 인자는 비교할 대상이다.
메서드의 반환 값은 두 객체를 비교한 결과를 나타내고,
일반적으로 True 혹은 False를 반환한다.
__lt__ 메서드를 사용하기 위해서는 해당 메서드가 정의되어있는 클래스에서 상속받아야 한다.
str을 상속받은 compare 클래스를 선언해 준 다음, __lt__메서드를 정의해 주었다.
그런데 str은 단일인자이고 함수는 a와 b 인자를 필요로 하는데 어떻게 연산이 가능한 걸까?
파이썬은 덕 타이핑이라는 특징을 가진다.
덕 타이핑이란 실제 타입이나 상속관계 보다는
객체의 속성이나 메서드의 존재가 객체의 적합성을 결정하는 프로그래밍 스타일이다.
__lt__ 메서드는 str클래스를 상속받은 compare 클래스 내에 위치하기 때문에
str클래스에서 정의중인 __lt__ 클래스를 사용하는 것이다
a와 b인자를 이용해 연산을 수행하는 것이 아니라
내부에서 단일인자 self를 통해 self와 other 객체간 연산이 수행되어 가능하다.