[Python] hasattr 내장함수

azzurri21·2021년 6월 26일
0

입력/출력 자료형

hasattr(obj, name: str) -> bool

인수로 전달된 객체 objname이라는 이름의 속성이 존재하는지 판단한다. 있으면 True, 없으면 False.

속성 존재 판단 기준 (클래스와 인스턴스에서)

class A:
    c = 0
    def __init__(self):
        self.i = 10
    def f(self):
        pass

a = A()
print('클래스 이름공간	:', vars(A))
print()
print('인스턴스 이름공간	:', vars(a))
클래스 이름공간	: {'__module__': '__main__',
		   'c': 0,
           	   '__init__': <function A.__init__ at 0x0000022DF81EB3A0>,
           	   'f': <function A.f at 0x0000022DF81EB430>,
               	   '__dict__': <attribute '__dict__' of 'A' objects>,
                   '__weakref__': <attribute '__weakref__' of 'A' objects>,
                   '__doc__': None}
                   
인스턴스 이름공간	: {'i': 10}
print('클래스가 인스턴스 변수를 가진다?', hasattr(A, 'i'))
print('클래스가 클래스 변수를 가진다?', hasattr(A, 'c'))
print('클래스가 메소드를 가진다?', hasattr(A, 'f'))
print()

print('인스턴스가 인스턴스 변수를 가진다?', hasattr(a, 'i'))
print('인스턴스가 클래스 변수를 가진다?', hasattr(a, 'c'))
print('인스턴스가 메소드를 가진다?', hasattr(a, 'f'))
클래스가 인스턴스 변수를 가진다? False
클래스가 클래스 변수를 가진다? True
클래스가 메소드를 가진다? True

인스턴스가 인스턴스 변수를 가진다? True
인스턴스가 클래스 변수를 가진다? True
인스턴스가 메소드를 가진다? True

[결론]
scoping rule에 의해 접근 가능하면 True, 아니면 False.

profile
파이썬 백엔드 개발자

0개의 댓글