2013-09-21 1 views
1

클래스로 모듈을 오버라이드 할 수 있습니까? 파이썬 모듈 오버라이드

설명해 드리죠

, 여기

는 파일 시스템

foo 
|-- bar 
| |-- __init__.py 
| |-- config.py 
|-- __init__.py 

은 누군가가 foo.bar.config을 수입 할 때마다 그들이 대신 config.py에서 버전의 config를 오버라이드 (override) 가져 그래서 foo.bar.__init__.py에서 config.py를 오버라이드 (override) 할 수있다?

예, 그렇다면 어떻게해야합니까?

Ps : 특정 조건에 따라 config.py를 재정의합니다.

+0

'foo/bar/__ init __. py'를 수정할 수 있다면'foo/bar/config.py' 파일을 단순히 갱신 할 수없는 이유는 무엇입니까? – chepner

답변

4

foo/bar/__init__.pyconfig이라는 클래스를 정의하면 가져올 수 있습니다. 그런데 config.py을 변경하면 어떨까요?

In [4]: !ls foo 
__init__.py bar/ 
In [5]: !ls foo/bar 
__init__.py config.py 
In [6]: !cat foo/bar/__init__.py 
class config(object): 
    pass 
In [7]: from foo.bar import config  
In [8]: type(config) 
Out[8]: type 

$ echo "" > foo/bar/__init__.py 
$ ipython 

In [1]: from foo.bar import config  
In [2]: type(config) 
Out[2]: module