是否可以导入函数内定义的类?

时间:2014-11-24 21:23:02

标签: python pyramid python-import

有一个来自第三方系统的课程,我想按照自己的目的进行分类,但它是在一个函数中定义的,如下所示:

def foo():
    class Bar():

    return Bar

如果我尝试仅使用from x import bar导入它,我会获得ImportError: cannot import name 'Bar'。导入Bar是否可能(或明智)?也许原始编码器专门将该类放在函数内部以防止其他人直接使用它?

I类尝试获取的是CookieSession,在BaseCookieSessionFactory中定义,可在此处找到: http://docs.pylonsproject.org/projects/pyramid/en/master/_modules/pyramid/session.html

它已经完成了我想要的90%,从头开始实现我自己似乎是一种浪费,因为我只是复制粘贴大部分代码。

修改 根据Chepner的回答,我通过建立自己的工厂功能对其进行了分类:

from pyramid.session import SignedCookieSessionFactory

def MySessionFactory(secret, [other args here...]):
    @implementer(ISession)
    class MySession(SignedCookieSessionFactory(secret)):
       ...
    return MySession

1 个答案:

答案 0 :(得分:4)

您无法导入它,因为在foo实际上被称为之前它不存在。但是,foo似乎只是定义了函数并返回对它的引用。在这种情况下,你只需要像

这样的东西
from otherfile import foo
Bar = foo()

x = Bar()  # create an instance of Bar