today what i've get
문서로 생각을 정리하는 것은 중요하다.
머리 속이 아닌 글로 남기는 습관을 만들어야겠다.
abstract base class
https://docs.python.org/ko/3/library/abc.html
python은 언어 차원에서 추상클래스를 제공하지 않는다.
라이브러리를 사용해야하는데, 대략적인 틀은 다음과 같다.
from abc import ABC
class MyABC(ABC):
pass
추상 메소드를 작성하려면 아래와 같은 방법을 사용하면 된다.
class C(ABC):
@abstractmethod
def my_abstract_method(self, ...):
...
이 방법은 나쁘지 않은 방법이라고 생각한다.
(가시도가 높기 때문에, @notation으로 언급되어 있기 때문에 코드를 보았을 때 알아보기가 더 쉬울 것 이다.)
다른 방법도 있다.
https://stackoverflow.com/questions/4382945/abstract-methods-in-python
def my_abstract_method(self, ...):
raise NotImplementedError
상속받은 메소드를 구현하지 않았다면, raise 될 것 이다.
python은 언어 차원에서 setter, getter를 지원한다.
class Test(object):
def __init__(self, value):
self._x = value
@property
def x(self):
return self._x
@_x.setter
def x(self, x)
self._x = x
코드를 살펴보면 local var를 '_'를 이용해서 작성했음을 알 수 있는데
이는 recursion을 방지하기 위함이다.
반환하는 변수명과 클래스 멤버변수의 이름이 같다면, 반환하는 값이 메소드가 되기 때문에 반환하는 값은 멤버변수와 다른 이름을 사용해야 한다.
python에서 모듈화를 한다는 것은 각각의 스크립트를 호출하는 과정인 것으로 보인다.
스크립트들은 엔트리 포인트가 존재하고, main.py가 그러한 예시가 될 것 이다.
이 경우 from의 시점은 main을 중심으로 보면 된다.
다른 파일도 상대적인 경로를 자신이 아닌 main을 기점으로 보면 된다.
(각 파일의 경로가 아닌 main.py의 경로만 생각하는 것 이다.)
그 외에도 이러한 방법이 있다고 하니, 추후 적용해보자.
https://stackoverflow.com/questions/714063/importing-modules-from-parent-folder
pycharm에서 커스텀 모듈을 인지하지 못한다면, src 디렉토리를 Mark Directory As -> Sources Root 지정하도록 하자.
개발도구에서 인지하기 시작한다.