본문 바로가기

Inheritance3

Python 파이썬에서 추상 클래스를 만들 수 있을까요?, Is it possible to make abstract classes in Python? 질문 파이썬에서 클래스나 메소드를 추상화하는 방법은 무엇인가요? 다음과 같이 __new__()를 재정의해 보았습니다: class F: def __new__(cls): raise Exception("추상 클래스 %s의 인스턴스를 생성할 수 없습니다" %cls) 하지만, 이제 F를 상속받는 G 클래스를 다음과 같이 만들면: class G(F): pass G를 인스턴스화할 수 없습니다. 왜냐하면 G는 슈퍼 클래스의 __new__ 메소드를 호출하기 때문입니다. 추상 클래스를 정의하는 더 좋은 방법이 있을까요? 답변 추상 클래스를 만들기 위해 abc 모듈을 사용하세요. 메서드를 추상으로 선언하기 위해 abstractmethod 데코레이터를 사용하고, 파이썬 버전에 따라 세 가지 방법 중 하나를 사용하여 클래스를 .. 2023. 11. 16.
Python __init__() 메서드와 함께 Python super() 이해하기 [중복], Understanding Python super() 질문왜 super()를 사용하나요?Base.__init__와 super().__init__를 사용하는 것에 차이가 있나요?class Base(object): def __init__(self): print "Base created" class ChildA(Base): def __init__(self): Base.__init__(self) class ChildB(Base): def __init__(self): super(ChildB, self).__init__() ChildA() ChildB() 답변super()는 기본 클래스를 명시적으로 참조하지 않아도 되어 좋을 수 있습니다. 그러나 주요 이점은 모든 종류의 다중 상속에서 발생할 수 있는 재미있는 일들입니다. 아직 이에 대해 알지 못했다면 super의 표.. 2023. 5. 6.
Python @staticmethod와 @classmethod의 차이점, Difference between @staticmethod and @classmethod 질문 데코레이트된 메소드와 @staticmethod로 데코레이트된 메소드, 그리고 @classmethod로 데코레이트된 메소드의 차이점은 무엇인가요? 답변 아래의 예제 코드를 보면서 이해해보세요: foo, class_foo, static_foo의 호출 시그니처의 차이점을 주목하세요: class A(object): def foo(self, x): print(f"executing foo({self}, {x})") @classmethod def class_foo(cls, x): print(f"executing class_foo({cls}, {x})") @staticmethod def static_foo(x): print(f"executing static_foo({x})") a = A() 아래는 객체 인스턴스가.. 2023. 5. 4.