Class 내에 정의할 수 있는 method로, Class method, instance method, static method 가 있다. 각 method 의 개념과 사용목적을 이해하고, 관습적 용도에 따라 프로그래밍을 했을 때, 나의 소스를 읽는 사람들이 해당 method의 기능과 목적을 이해하는데 더욱 수월하고 더 나아가 내가 정의한 Class를 이해하는데까지 수월할 수 있을 것이라는 기대가 있다. 이러한 중요성 때문에 세가지 method에 대해 정리해보기로 했다. 먼저 객체의 method 에 해당하는 instance method 부터 정리해보자
self
를 포함한 메소드로서 method 내부에서 객체의 고유한 속성인 instance attribute 들을 접근 및 수정하기 위한 method이다.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>
우리를 위한 프로그래밍 : 파이썬 중급 (인프런)
__dict__와 dir (0) | 2022.04.05 |
---|---|
Class와 method 활용 (5) - Static method (0) | 2022.04.04 |
Class와 method 활용 (4) - Class method (0) | 2022.04.03 |
Class와 method 활용 (2) - Class 설계하기 (0) | 2022.04.01 |
Class와 method 활용 (1) - Class를 활용한 OOP의 장점 (0) | 2022.03.30 |
댓글 영역