초보 개발자

25강 isinstance 함수와 object 클래스 본문

카테고리 없음

25강 isinstance 함수와 object 클래스

taehyeki 2022. 1. 18. 11:35

[isinstance 함수]

먼저 다음 함수를 소개하고자 한다

isinstance(object, classinfo ) 첫번째 인자엔 객체를 전달한다. 두번째 인자엔 클래스를 전달한다.

 

첫번째의 객체가 두번째 클래스의 객체인지 확인하는 기능이다. T / F 반환

 

s = Simple()
isinstance(s, Simple)
True
isinstance([1,2],list)
True

 

class Fruit:
    pass
class Apple(Fruit):
    pass #
class SuperApple(Apple):
    pass #

sa = SuperApple()
print(isinstance(sa,SuperApple))
print(isinstance(sa,Apple))
print(isinstance(sa,Fruit))
True
True
True

1번째 인자가 2번째 인자의 클래스의 객체이거나, 그 클래스가 상속하는 클래스의 객체이면 True를 반환한다.

 

[object 클래스]

파이썬의 모든 클래스는 object클래스를 직접 혹은 간접 상속한다.

print(isinstance(Fruit,object))
true

이는 클래스를 정의할 대 object클래스를 상속하도록 코드를 작성해야 한다는 뜻이 아니다.

object클래스의 상속을 병시하지 않아도 파이썬이 이를 직접 혹은 간접 상속하도록 클래스를 구성한다는 뜻이다.

 

따라서 기본적으로 object가 가지고있는 기능을 파이썬의 클래스 객체들이 다 가지고 있다.

 

class A:
    pass
class B(A):
    pass
print(issubclass(B,A))
True

issubclass의 첫 번째 인자가 두 번째 인자를 상속하는지 확인하는 메서드이다.

여기서 첫번째 인자는 객체가 아니라 클래스이다 이 점에서 isinstance함수 차이가 난다.

 

print(dir(object))

['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__
gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '
__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']

여기서 __init__ 이 있는걸 확인할 수 있는데 우리가 클래스를 정의할 때 __init__을 썼던 것은 사실 단순 정의가아니라

메소드 오버라이딩의 형태로 정의해왔던 것이다. 모든 클래스는 object클래스를 상속하기에.