dir() 함수는 Python의 내장 함수로, 객체가 가지고 있는 모든 속성과 메서드의 이름을 리스트로 반환해준다.
이 함수를 사용하면 객체의 내부 구조와 사용 가능한 모든 속성 및 메서드를 확인할 수 있는데,
보통 getattr과 hasattr 등과 함께 쓰인다.
아래 코드를 보자 (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문 다음을 실행한다.이 코드의 목적은 모듈 내에서 page_name 이라는 속성을 가진 객체(주로 클래스)를 찾는 것으로, 동적으로 페이지 클래스들을 발견하고 로드하기 위한 코드이다.
예를 들어, 모듈 내에 다음과 같은 클래스가 있다면:
class HomePage:
page_name = "Home"
...
class AboutPage:
page_name = "About"
...
위 코드는 이러한 클래스들을 찾아내고 그들의 page_name을 사용할 수 있게 해준다.