[Python] Class 내부 메서드

이정연·2023년 3월 29일
0

Play Data

목록 보기
16/26

내부 메서드란?

파이썬에서 help 명령어를 쳐보면 가끔 언더바(_)가 붙은 메서드들을 본 적이 있을 것이다.

class list(object)
 |  list(iterable=(), /)
 |  
 |  Built-in mutable sequence.
 |  
 |  If no argument is given, the constructor creates a new empty list.
 |  The argument must be an iterable if specified.
 |  
 |  Methods defined here:
 |  
 |  __add__(self, value, /)
 |      Return self+value.
 |  
 |  __contains__(self, key, /)
 |      Return key in self.
 |  
 |  __delitem__(self, key, /)
 |      Delete self[key].
 |  
 |  __eq__(self, value, /)
 |      Return self==value.
 |  
 |  __ge__(self, value, /)
 |      Return self>=value.
 
 ...
 
   pop(self, index=-1, /)
 |      Remove and return item at index (default last).
 |      
 |      Raises IndexError if list is empty or index is out of range.
 |  
 |  remove(self, value, /)
 |      Remove first occurrence of value.
 |      
 |      Raises ValueError if the value is not present.
 |  
 |  reverse(self, /)
 |      Reverse *IN PLACE*.
 |  
 |  sort(self, /, *, key=None, reverse=False)
 |      Sort the list in ascending order and return None.
 |      
 |      The sort is in-place (i.e. the list itself is modified) and stable (i.e. the
 |      order of two equal elements is maintained).
 |      
 |      If a key function is given, apply it once to each list item and sort them,
 |      ascending or descending, according to their function values.
 |      
 |      The reverse flag can be set to sort in descending order.

위는 리스트를 구성하는 항목들이다.

예를 들어, __ge__pop 모두 리스트 자료형에서 사용할 수 있는 메서드지만 언더바가 붙은 것들은 클래스 내부에서만 사용하는 메서드이다.

다시 말해, 사용자가 특별히 외부에서 호출할 일이 없다는 소리.

내부 메서드는 평상시에도 사용하고 있었다?!! 😳

코딩의 기초.

print("hello world!")

위 코드의 동작 과정을 엄밀히 서술하자면 print라는 함수가 "hello world!"라는 string 클래스의 __str__ 메서드를 호출하기 때문에 발생한다.

예를 들어, 나만의 클래스를 만들어 보자.

class Temp:

    def __init__(self,string) -> None:
        self.string = string
    
    def __str__(self):
        return self.string

if __name__ == '__main__':
    temp = Temp("hello world!")
    print(temp)

Temp Class로 temp instance를 생성했다.

그리고 temp를 print로 찍으면

Temp 클래스의 __str__ 메서드가 실행되고

이에 따라 파라미터로 받은 "hello world!"가 반환되며

터미널엔 hello world!가 찍힌다.

이와 비슷한 예로, len()은 __len__에 대치되고

for은 __iter__에 대치된다.

따라서

lst = [0,1,2,3,4]
print(len(lst))
print(lst.__len__())

위 코드는 동일한 결과값인 5를 내뱉는다.

profile
0x68656C6C6F21

0개의 댓글