파이썬에서 한 클래스가 다른 클래스의 하위 클래스(서브클래스)인지 확인하려면 NumPy의 numpy.issubclass_() 메서드를 사용하면 됩니다.
첫 번째 인수는 입력 클래스이며, arg1이 arg2의 하위 클래스이면 True를 반환합니다. 두 번째 인수 역시 입력 클래스인데, 클래스 튜플을 전달하는 경우 arg1이 튜플 내 요소 중 어느 하나의 하위 클래스이기만 해도 True를 반환합니다.
issubclass_는 파이썬 내장 함수인 issubclass와 기본적으로 동일하지만, 인수 중 하나가 클래스가 아닐 때 TypeError 예외를 발생시키는 대신 단순히 False를 반환한다는 차이점이 있습니다. 덕분에 타입 검증 로직을 더 안전하게 작성할 수 있습니다.
단계별 진행
먼저 필요한 라이브러리를 임포트합니다.
import numpy as np
NumPy의 issubclass_() 메서드를 사용해 클래스가 두 번째 클래스의 하위 클래스인지 확인합니다.
print("Result...",np.issubclass_(np.float16, np.float32))
print("Result...",np.issubclass_(np.int32, np.signedinteger))
print("Result...",np.issubclass_('i4', np.signedinteger))
print("Result...",np.issubclass_(np.int64, int))
print("Result...",np.issubclass_(np.float64, float))
print("Result...",np.issubclass_('S8', str))
print("Result...",np.issubclass_(np.int16, float))
print("Result...",np.issubclass_(np.array([45, 89]), int))
print("Result...",np.issubclass_(np.int32, np.integer))전체 예제 코드
import numpy as np
# 파이썬 numpy에서 클래스가 두 번째 클래스의 하위 클래스인지 확인하려면 numpy.issubclass_() 메서드를 사용합니다.
# 첫 번째 인수는 입력 클래스이며, arg1이 arg2의 하위 클래스이면 True를 반환합니다.
# 두 번째 인수도 입력 클래스이며, 클래스 튜플을 전달하면 arg1이 튜플 요소 중 하나의 하위 클래스일 경우 True를 반환합니다.
# issubclass_는 파이썬 내장 issubclass와 동일하지만,
# 인수 중 하나가 클래스가 아니면 TypeError 대신 False를 반환합니다.
print("Using the issubclass_() method in Numpy\n")
# 클래스가 두 번째 클래스의 하위 클래스인지 확인
print("Result...",np.issubclass_(np.float16, np.float32))
print("Result...",np.issubclass_(np.int32, np.signedinteger))
print("Result...",np.issubclass_('i4', np.signedinteger))
print("Result...",np.issubclass_(np.int64, int))
print("Result...",np.issubclass_(np.float64, float))
print("Result...",np.issubclass_('S8', str))
print("Result...",np.issubclass_(np.int16, float))
print("Result...",np.issubclass_(np.array([45, 89]), int))
print("Result...",np.issubclass_(np.int32, np.integer))출력 결과
Using the issubclass_() method in Numpy Result... False Result... True Result... False Result... False Result... True Result... False Result... False Result... False Result... True
출력 결과를 살펴보면 몇 가지 흥미로운 점을 확인할 수 있습니다. np.int32는 NumPy 스칼라 타입 계층의 np.signedinteger와 np.integer의 하위 클래스이므로 True를 반환하지만, 파이썬 내장 int의 하위 클래스는 아니므로 False가 나옵니다. 반면 np.float64는 내장 float의 하위 클래스이기 때문에 True를 반환합니다. 또한 문자열 'i4', 'S8'처럼 클래스가 아닌 값을 전달하거나, ndarray 객체를 전달하는 경우에도 예외 없이 False가 반환되는 것을 볼 수 있습니다.