상세 컨텐츠

본문 제목

Class와 method 활용 (3) - instance method

개발/python-심화(Advanced)

by Matthew0633 2022. 4. 2. 23:54

본문

Instance Method

Class 내에 정의할 수 있는 method로, Class method, instance method, static method 가 있다. 각 method 의 개념과 사용목적을 이해하고, 관습적 용도에 따라 프로그래밍을 했을 때, 나의 소스를 읽는 사람들이 해당 method의 기능과 목적을 이해하는데 더욱 수월하고 더 나아가 내가 정의한 Class를 이해하는데까지 수월할 수 있을 것이라는 기대가 있다. 이러한 중요성 때문에 세가지 method에 대해 정리해보기로 했다. 먼저 객체의 method 에 해당하는 instance method 부터 정리해보자
  • Why :
    instance method는 Class 내 method 중 인자로 self를 포함한 메소드로서 method 내부에서 객체의 고유한 속성인 instance attribute 들을 접근 및 수정하기 위한 method이다.
  • How :
    정의할 때는 self는 method를 호출하는 객체 자신을 의미하는데, attribute의 경우 self를 붙여주고, method의 경우 self를 인자로 받도록 한다. 접근할 때는 self.변수명, self.메소드명() 으로 접근한다.
class Car:
    # instance method
    def __init__(self, company, details):
        self._company = company
        self._details = details

        # instance method 내에서 class attribute 또한 다룰 수 있다
        Car.car_count += 1 

    # instance method
    def detail_info(self):
            print(self._details)

사용 시 주의사항 :

외부에서 instance attribute 접근 및 instance method 호출도 가능하다.

그러나 외부에서 직접적으로 Class attribute 또는 instance attribute 를 접근하는 것은 PEP에서 권장하지 않고 있다.

그 이유는 임의로 접근하여 수정해서 문제가 발생하는 경우를 막기 위함이다

따라서, Class attribute 와 instance attribute 값을 접근 또는 수정하고자 할 때는 해당 기능을 수행할 수 있는 method를 정의하여 사용자가 method를 활용하여 attribute 값을 반환받거나 method 내에서 수정되도록 짜는 것이 better code 이다 ! 

적용 : 업무를 하며 내가 만든 Tokenizer 의 vocab을 update할 때가 종종 있는데, 위의 내용에 따른 better code와 그렇지 않은 코드를 작성해보았다
from typing import Dict
    
class MyTokenizer(Object):
    
    def __init__(self, vocab:Dict):
        self.vocab = vocab
        self.num_vocab = len(vocab)

    def add_vocab(self, word):
        """
        instance method인 add_vocab을 통해 
        instance attribute인 num_vocab이 수정되도록 정의
        """
        self.vocab[word] = self.num_vocab 
        self.num_vocab +=1
    
# 안좋은 예 (직접 접근)
tokenizer = MyTokenizer(vocabs)
tokenizer.vocab['new'] = 1
tokenizer.num_vocab +=1

# 좋은 예 (instance method 활용)
tokenizer.add_vocab(word)

<Reference>
우리를 위한 프로그래밍 : 파이썬 중급 (인프런)

관련글 더보기

댓글 영역