본문 바로가기
Computer & Program/python

[python] class(클래스) - 03

by TDRemon 2024. 2. 26.
반응형

안녕하세요. TDR입니다.

2부에 이서 클래스 상속, 추상 클래스에 대해서 간략히 정리해 보겠습니다.

 

[python] class(클래스) - 01

안녕하세요. TDR입니다. 이번에는 python에서 class를 어떻게 선언하고 어떤 식으로 사용하는지 간략히 정리해 보겠습니다. Default format class SomeClass: # 생성자 def __init__(self): pass def set_fruits(self, fruits)

tdremon.tistory.com

 

[python] class(클래스) - 02

안녕하세요. TDR입니다. 오늘은 1부에 이어 비공개, 정적 , 클래스 메소드에 대해서 간략히 정리해 보겠습니다. [python] class(클래스) - 01 안녕하세요. TDR입니다. 이번에는 python에서 class를 어떻게 선

tdremon.tistory.com

Class inheritance(클래스 상속)

class ParentClass:
  __name = ''
  def __init__(self, name):
    self.__name = name

  def get_name(self):
    return self.__name

class ChildClass(ParentClass):
  __age = 0
  def __init__(self, name, age):
    # super(ChildClass, self).__init__(name)
    super().__init__(name)
    self.__age = age
  
  def get_age(self):
    return self.__age
  
  def get_name(self):
    return super().get_name()
  
       
child_instance = ChildClass('John', 20)
print(child_instance.get_name())
print(child_instance.get_age())

부모 클래스를 자식 클래스에서 상속할 때는 클래스 이름 옆에 함수의 인수를 받드시 선언해 주면 됩니다. 그리고 생성자에서는 super().__init__()과 같은 부모 클래서를 호출해 줌으로서 자식 클래스에서 부모 클래스의 attribute에 직접 접근이 가능해집니다. 위 예시에는 private attribute임으로 직접 접근은 불가합니다. 참고로, super().__init__()를 생략하더라도 python에서 자동으로 호출해 줍니다. 자식 클래스에서 부모 클래스의 method를 호출하기 위해서는 super()라는 키워드를 통해 호출이 가능합니다.

python에서는 다중 상속을 허용하는데 이는 다음 기회에 정리해 보도록 하겠습니다.

Abstract class(추상 클래스)

from abc import *

class AbstactClass(metaclass=ABCMeta):
  name = 'abstract class'
  num = 0

  def description(self):
    return "This is Abstact class"
  
  @abstractmethod
  def get_some_num(self):
    pass
  

class SomeClass(AbstactClass):
  def __init__(self):
    pass

  def set_some_num(self, num):
    self.num = num

  def get_some_num(self):
    return self.num

instance = SomeClass()
instance.set_some_num(10)
print(instance.get_some_num())

익히 알고 계신 추상 클래스 입니다. 눈여겨 볼 부분으로는 반드시 from abc import * 를 통해 import를 해줘야 하는 부분과 추상 클래스를 생성하기 위해서는 인수로 metaclass=ABCMeta를 넣어 줘야 한다는 점입니다.

그리고 get_some_num method에 @abstractmethod decorator가 붙어 있는데, 이는 해당 추상 클래스를 상속하는 클래스에서는 반드시 해당 method를 구현해 줘야함을 뜻합니다. (마치 Java의 interface와 유사) 만약 구현을 안해주면 아래와 같은 Error가 발생합니다.

TypeError: Can't instantiate abstract class SomeClass with abstract method get_some_num

 

 

 

반응형

'Computer & Program > python' 카테고리의 다른 글

[python] Assert(어설트)  (2) 2024.02.28
[python] try-except (예외처리)  (0) 2024.02.27
[python] class(클래스) - 02  (1) 2024.02.25
[python] class(클래스) - 01  (0) 2024.02.24
[python] 지역변수 & 전역변수  (0) 2024.02.23

댓글