在django启动过程中:
execute_from_command_line->utility.execute()->settings.INSTALLED_APPS
我们来看下settings.INSTALLED_APPS是如何工作的。
1、首先:
from django.conf import settings
我们查看settings,原来settings 是LazySettings的实例。
settings = LazySettings()
LazySettings继承了LazyObject。
class LazySettings(LazyObject):
2、然后,我们看下settings = LazySettings()实例化做了什么,LazySettings本身没有__init__方法,也就是说直接使用了__init__方法。
_wrapped = None
def __init__(self):
# Note: if a subclass overrides __init__(), it will likely need to
# override __copy__() and __deepcopy__() as well.
self._wrapped = empty
这个实例化什么都没做。
3、settings.INSTALLED_APPS 调用settings的属性INSTALLED_APPS ,发生了什么呢?
# 这个是LazySettings的__getattr__方法
def __getattr__(self, name):
"""