IPython可配置自定义类

时间:2014-06-09 13:48:17

标签: python ipython

我正在尝试使用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源码,看不到任何明显的东西。

1 个答案:

答案 0 :(得分:1)

配置系统创建一个配置对象,在实例化类时传入,以配置它们。如果你想在IPython中使用它,你可以这样做:

x = MyConfigTest(config=get_ipython().config)

我们并不打算在IPython中配置用户对象。这是可能的,但不是配置系统的用例。 设计用于配置IPython扩展中的类,并且足够通用,您可以将它用于完全独立的应用程序(通过子类化IPython.config.application.Application)。