dir, getattr, hasattr

SeongGyun Hong·2024년 10월 16일

Python

목록 보기
7/34

0. dir이란?

dir() 함수는 Python의 내장 함수로, 객체가 가지고 있는 모든 속성과 메서드의 이름을 리스트로 반환해준다.
이 함수를 사용하면 객체의 내부 구조와 사용 가능한 모든 속성 및 메서드를 확인할 수 있는데,
보통 getattr과 hasattr 등과 함께 쓰인다.

1. 코드 예시

아래 코드를 보자 (MRC 코드에서 index.py 준성님 코드)

module = importlib.import_module(f'server.page.{module_name}')
for attr in dir(module):
                obj_by_attr = getattr(module, attr)
                if hasattr(obj_by_attr, "page_name") and obj_by_attr.page_name is not None:
                

해당 코드를 단계별로 설명하자면

1. for attr in dir(module):

  • dir(module)은 모듈 객체의 모든 속성과 메서드 이름을 리스트로 반환하고
  • for문은 이 리스트를 순회하면서 각 속성 이름을 attr에 할당한다.

2. obj_by_attr = getattr(module, attr)

  • getattr() 함수는 객체에서 지정된 이름의 속성 값을 가져오고
  • 여기서는 module 객체에서 attr 이름의 속성 값을 가져와 obj_by_attr에 할당한다.

3. if hasattr(obj_by_attr, "page_name") and obj_by_attr.page_name is not None::

  • hasattr() 함수는 객체가 특정 속성을 가지고 있는지 확인하고, 그 값이 None이 아닌 경우 if문 다음을 실행한다.

2. 요약

이 코드의 목적은 모듈 내에서 page_name 이라는 속성을 가진 객체(주로 클래스)를 찾는 것으로, 동적으로 페이지 클래스들을 발견하고 로드하기 위한 코드이다.

예를 들어, 모듈 내에 다음과 같은 클래스가 있다면:

class HomePage:
    page_name = "Home"
    ...

class AboutPage:
    page_name = "About"
    ...

위 코드는 이러한 클래스들을 찾아내고 그들의 page_name을 사용할 수 있게 해준다.

profile
헤매는 만큼 자기 땅이다.

0개의 댓글