Post

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.