我正在尝试使用IPython配置系统为我自己的类提供配置参数。我尝试了一个简单的测试。
from IPython.config.configurable import Configurable
from IPython.utils.traitlets import Int, Unicode, Bool
class MyConfigTest(Configurable):
user_name = Unicode(u'Fred', config=True)
def __init__(self, config=None):
super(MyConfigTest, self).__init__(config=config)
def display(self):
print 'my name is ' + self.user_name
然后把它放在我的配置文件中:
c.MyConfigTest.user_name = 'John'
当我运行IPython --debug时,我可以看到我的配置变量正在被正确读取:
[TerminalIPythonApp] Config changed:
[TerminalIPythonApp] {'MyConfigTest': {'user_name': 'John'}, 'TerminalIPythonApp
': {'log_level': 10}}
但是当我在代码中实例化MyConfigTest
时,它仍然具有默认值:
In [1]: x = MyConfigTest()
In [2]: x
Out[2]: <__main__.MyConfigTest at 0x2e1dc50>
In [3]: x.display()
my name is Fred
我读错了变量吗?我读了一些IPython源码,看不到任何明显的东西。
答案 0 :(得分:1)
配置系统创建一个配置对象,在实例化类时传入,以配置它们。如果你想在IPython中使用它,你可以这样做:
x = MyConfigTest(config=get_ipython().config)
我们并不打算在IPython中配置用户对象。这是可能的,但不是配置系统的用例。 设计用于配置IPython扩展中的类,并且足够通用,您可以将它用于完全独立的应用程序(通过子类化IPython.config.application.Application
)。