<개인공부>/[Python]

[python] 파이썬 issubclass 클래스 포함관계

BlockDMask 2021. 10. 14. 21:00
반응형

안녕하세요. BlockDMask입니다.
오늘은 파이썬에서 서브 클래스인지 아닌지를 확인할 수 있는 issubclass 함수에 대해서 이야기해보려 합니다.

파이썬의 클래스 상속 관계에 대한 지식이 필요합니다.
관련 포스팅을 읽고 오시면 더욱 도움이 될 것입니다. [바로가기]

<목차>
1. 파이썬 issubclass 설명 
2. 파이썬 issubclass 예제 

 

1. issubclass 함수 설명


1-1) issubclass 기본 모양

issubclass(자식클래스, 부모클래스)

첫 번째 인자 : 포함당하는지(포함되는지) 확인하려는 자식 클래스(서브클래스), 데이터 타입
두 번째 인자 : 포함하는지 확인하려는 부모 클래스(기반 클래스), 데이터 타입
결과 : 첫 번째 인자가 두 번째 인자에 포함되면 True, 그렇지 않으면 False.
즉, 자식 클래스가 부모 클래스 내에 포함되면 True를 반환하고 그렇지 않으면 False를 반환합니다.

 

참고로 issubclass는 파이썬에 빌트인 되어있는 함수이므로 따로 import 할 모듈은 없습니다.
이런 기본 빌트인 함수들은 import builtins에 있긴 한데
임포트 하지 않아도 builtins 내부에 있는 것은 자유롭게 사용이 가능합니다.

또한, 데이터 타입(int, float 등)도 클래스로 만들어져 있기 때문에 issubclass에서 사용이 가능한 것입니다.

막간 용어 정리.
기반 클래스 = 부모 클래스
서브 클래스 = 자식 클래스

 

1-2) issubclass 사용방법

issubclass(int, int) # int 타입은 int 타입에 포함하기 때문에 True
issubclass(int, float) # int 타입은 float 타입에 포함하지 않기 때문에 False

 

 

2. issubclass 함수 예제


2-1) issubclass 기본 예제

# 기본 타입 확인
result1 = issubclass(int, int)
print(f'issubclass(int, int) : {result1}')

result2 = issubclass(int, float)
print(f'issubclass(int, float) : {result2}')

result3 = issubclass(float, int)
print(f'issubclass(float, int) : {result3}')

result4 = issubclass(bool, str)
print(f'issubclass(bool, str) : {result4}')


# 유저가 만든 클래스
class Parent:         # 부모가 될 클래스 (기반 클래스)
    pass

class Child(Parent):  # 자식 클래스 (서브 클래스)
    pass


result5 = issubclass(Child, Parent)
print(f'issubclass(Child, Parent) : {result5}')

result6 = issubclass(Parent, Child)
print(f'issubclass(Parent, Child) : {result6}')

result7 = issubclass(Parent, Parent)
print(f'issubclass(Parent, Parent) : {result7}')

result8 = issubclass(Child, Child)
print(f'issubclass(Child, Child) : {result8}')

python issubclass 부모클래스 자식클래스 예제

result1 ~ 4 까지는 
기본 클래스(타입) 들을 이용해서 예제를 작성해보았습니다.
자기 자신의 타입은 issubclass로 비교해 보았을 때 True 가 나온 것을 볼 수 있고
그 외에는 모두 False 가 나온 것을 볼 수 있습니다.

result 5~8 은 제가 직접 만든 클래스를 이용해서 비교해보았습니다.
Parent 클래스는 기반 클래스이며
Child 클래스는 Parnet 클래스를 상속받은 서브 클래스입니다.
그렇기 때문에
issubclass(Child, Parent) # True
issubclass(Parent, Child) # False
가 나오게 됩니다. 

정리하자면 issubclass(서브 클래스, 기반 클래스) 이 상황에서만 True가 나오게 됩니다.

 

 

2-2) issubclass 예제 + object 클래스

python에서 모든 클래스, 타입은 object 클래스의 상속을 받게 됩니다.
그렇기 때문에 모든 클래스, 타입, 사용자가 만든 클래스 등등 모든 것은 object 클래스의 서브 클래스라고 할 수 있습니다.
다시 이야기하면 object 클래스는 모든 것의 기반 클래스 라 할 수 있습니다.

이걸 이용하면 object를 기반 클래스로 들어가게 되면 모든 상황에서 issubclass 가 True가 나오게 됩니다.

# 기본 타입 확인
result1 = issubclass(int, object)
print(f'issubclass(int, object) : {result1}')

result2 = issubclass(str, object)
print(f'issubclass(str, object) : {result2}')

result3 = issubclass(float, object)
print(f'issubclass(float, object) : {result3}')

result4 = issubclass(bool, object)
print(f'issubclass(bool, object) : {result4}')


# 유저가 만든 클래스
class Parent:         # 부모가 될 클래스 (기반 클래스)
    pass

class Child(Parent):  # 자식 클래스 (서브 클래스)
    pass

result5 = issubclass(Child, object)
print(f'issubclass(Child, object) : {result5}')

result6 = issubclass(Parent, object)
print(f'issubclass(Parent, object) : {result6}')

python issubclass object

 

오늘은 이렇게 서브 클래스인지 (상속 관계인지) 확인하는 issubclass 함수에 대해서 알아보았습니다.
감사합니다.

반응형