일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Retry
- 공분산
- grad-cam
- chatGPT
- 상관관계
- session 유지
- youtube data
- tensorflow text
- UDF
- flask
- Counterfactual Explanations
- login crawling
- subdag
- 유튜브 API
- BigQuery
- XAI
- top_k
- Airflow
- integrated gradient
- TensorFlow
- correlation
- airflow subdag
- hadoop
- API Gateway
- spark udf
- API
- requests
- GCP
- GenericGBQException
- gather_nd
- Today
- Total
데이터과학 삼학년
Abstract method (추상 메서드) 본문
파이썬의 class를 공부하다 보면 정적메서드, 클래스메서드, 추상메서드를 볼 수 있다.
추상 메서드?
이것이 무엇인지 한번 알아보도록 하겠다.
추상메서드는 한 class를 만들때 꼭 있어야하는 method를 관리하기 위한 목적으로 사용할 수 있다.
쓰는 용도를 예를 들면 사람이라는 class를 만든다면, 그안에는 먹는다는 method와 일한다는 method가 꼭 있어야 한다. (일은...뭐..선택적일 수 있지만...ㅋㅋ)
또 다른 예는 어떤 기기를 켰을때 꼭 로고가 나오거나 소리가 나오게 해야하는 method를 만들어야한다. 이때 실수로 로고가 나오거나 소리가 나오게 하는 method를 class안에 넣지 않으면 큰(?) 일이 나게 된다.
이런 것을 막기 위한 용도로 추상클래스를 만들어 두고, 이 추상클래스를 실제 서비스할 클래스가 상속받게 만들어 꼭 만들어야 하는 method를 만들 수 있게 하는 일종의 체크리스트 관리같은 개념이라 보면 된다.
코드를 통해 확인해 보면
from abc import *
class HumanBase(metaclass=ABCMeta):
@abstractmethod
def eat(self):
pass
@abstractmethod
def work(self):
pass
class Human(HumanBase):
def __init__(self,name,*args):
self.name = name
print('나의 이름은 {}이다'.format(name))
def eat(self, food):
print('{}는 {}를 먹는다'.format(self.name,food))
a = Human('바나나')
a.eat('사과')
위 코드 처럼 abc(abstract base class)에서 metaclass=ABCMeta
를 불러와 추상클래스를 만들어 준다.
위 추상 클래스에서 선언한 두개의 eat, work 메서드가 Human class의 method에 모두 작성되지 않았으므로
아래와 같은 에러가 나타난다.
이것을 해결하기 위해 추상클래스에서 선언된 메서드를 모두 쓸 수 있도록 Human class의 method를
다음과 같이 코딩해주면!!!
from abc import *
class HumanBase(metaclass=ABCMeta):
@abstractmethod
def eat(self):
pass
@abstractmethod
def work(self):
pass
class Human(HumanBase):
def __init__(self,name,*args):
self.name = name
print('나의 이름은 {}이다'.format(name))
def eat(self, food):
print('{}는 {}를 먹는다'.format(self.name,food))
def work(self,job):
print('{}는 {}이란 일을 한다'.format(self.name,job))
a = Human('바나나')
a.eat('사과')
a.work('프로그래머')
나의 이름은 바나나이다
바나나는 사과를 먹는다
바나나는 프로그래머이란 일을 한다
아주 자~알 실행이 된다.
프로젝트를 할 때 추상클래스를 적절히 활용해보자!!!
추상클래스의 method는 빈 메서드로 만들 것!!!
---> 추상 클래스는 인스턴스를 만들 수 없으니 추상 메서드도 호출할 일이 없기 때문(feat.코딩도장)
'Python' 카테고리의 다른 글
모듈, 패키지 개념 정리 (if __name__=='__main__': 쓰는 이유) (4) | 2020.03.23 |
---|---|
OS 모듈 정리 (0) | 2020.03.02 |
Decorator (데커레이터) (0) | 2020.01.26 |
Closer (클로저) (0) | 2020.01.12 |
파이썬 Multiprocessing (4) | 2020.01.09 |