편집 기록

편집 기록
  • 프로필 nowp님의 편집
    날짜2020.10.08

    파이썬 스페셜 메서드 (`__len__`, `__str__`, ...) 는 클래스 만들 때 구현 하면 어떤 이점이 있죠?


    파이썬에서 스페셜메서드 (__len__, __str__ 이런거요) 는 클래스 만들 때 구현 하면 어떤 이점이 있죠?

    인터넷에서 찾은 예인데

    import collections
    
    Card = collections.namedtuple('Card', ['rank', 'suit'])
    
    class FrenchDeck:
        ranks = [str(n) for n in range(2, 11)] + list('JQKA')
        suits = 'spades diamonds clubs hearts'.split()
    
        def __init__(self):
            self._cards = [Card(rank, suit) for suit in self.suits
                                            for rank in self.ranks]
    
        def __len__(self):
            return len(self._cards)
    
        def __getitem__(self, position):
            return self._cards[position]
    

    여기서 __len__ 으로 이름 지은 것을 length라고 해놓고 써도 무방한 거 아닐까요? 어차피 return 에서 len( )하는 것 보면 중요한 것은 함수 기능이지 이름이 아닌것 같아서요..

    그럼에도 스페셜 메소드의 이름으로 구현하면 얻는 이점이 있을 까요?

  • 프로필 반시님의 편집
    날짜2020.10.08

    파이썬 스페셜 메서드


    파이썬에서 스페셜메서드 (__len, __str____ 이런거요) 는

    클래스 만들 때 구현 하면 어떤 이점이 있죠?

    인터넷에서 찾은 예인데

    import collections
    
    Card = collections.namedtuple('Card', ['rank', 'suit'])
    
    class FrenchDeck:
        ranks = [str(n) for n in range(2, 11)] + list('JQKA')
        suits = 'spades diamonds clubs hearts'.split()
    
        def __init__(self):
            self._cards = [Card(rank, suit) for suit in self.suits
                                            for rank in self.ranks]
    
        def __len__(self):
            return len(self._cards)
    
        def __getitem__(self, position):
            return self._cards[position]
    

    여기서 __len__으로 이름 지은 것을 length라고 해놓고 써도 무방한 거 아닐까요? 어차피 return 에서 len( )하는 것 보면 중요한 것은 함수 기능이지 이름이 아닌것 같아서요..

    그럼에도 스페셜 메소드의 이름으로 구현하면 얻는 이점이 있을 까요?