Abstract Class, abc
2024.05.30
Abstract Class
향후 클래스들을 선언할 때 일관적으로 맞춰갈 형식이 있다면, 추상 클래스로 미리 정해둘 수 있다. 특정 method를 반드시 정의하도록 강제하는 등의 기능을 할 수 있고, 추상 클래스 자체에 대해서는 인스턴스를 만들 수 없다.
(Song et al., 2021.)에서 사용된 코드를 보면 확률미분방정식들을 클래스로 정의하기 전에 먼저 SDE라는 추상클래스를 정의해서 사용했다.
abc (Abstract Base Classes)
파이썬에서는 클래스를 선언할 때 abc.ABC 라는 클레스를 상속하면 해당 클래스는 추상 클래스가 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import numpy as np
class Distribution(abc.ABC):
__init__(self):
super().__init__()
def get_likelihood(self, x):
pass
class NormalDistribution(Distribution):
__init__(self):
super().__init__(N)
def get_likelihood(self, x):
return (1/np.sqrt(2 * np.pi * (sigma**2))) * np.exp(-0.5 * (x-mean)**2 / (sigma**2))
test = abc.ABC() # 가능 <- ???
func = Distribution() # 불가능
sigmoid = NormalDistribution() # 가능
왜 abc.ABC는 인스턴스 생성이 가능한 건지는 모르겠다…
참고 자료
https://github.com/python/cpython/blob/3.9/Lib/abc.py
https://peps.python.org/pep-3119/
2024.05.30
This post is licensed under CC BY 4.0 by the author.