Notice
Recent Posts
Recent Comments
Link
초보 개발자
25강 isinstance 함수와 object 클래스 본문
[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클래스를 상속하기에.