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

标签 python pyramid python-import

有一个来自第三方系统的类,我想出于自己的目的对其进行子类化,但它是在函数中定义的,如下所示:

def foo():
    class Bar():

    return Bar

如果我尝试仅使用 from x import bar 导入它,则会收到 ImportError: Cannot import name 'Bar'。是否可以(或明智地)导入 Bar?也许最初的编码者将类放在函数中是为了防止其他人直接使用它?

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

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

编辑: 按照切普纳的回答中的建议,我通过构建自己的工厂函数对其进行了子类化:

from pyramid.session import SignedCookieSessionFactory

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

最佳答案

您无法导入它,因为在 foo 实际被调用之前它并不存在。然而,foo 似乎只是定义了该函数并返回对其的引用。在这种情况下,您只需要类似

from otherfile import foo
Bar = foo()

x = Bar()  # create an instance of Bar

关于python - 是否可以导入函数内定义的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27114419/

相关文章:

python - Apache Beam 中的并行度

python - 在主脚本中捕获子进程中生成的 jpg

pyramid - 未显示“gunicorn --paster”日志消息

python - "from x import y as z"与 "import x.y as z"

python - 下载 PDF 作为文件对象,无需使用 Python 中的 Chrome 和 Selenium 下载文件

python - 在python中写入csv文件时如何跳过一列

python - 我该如何去存储 session 对象?

python - 在断开连接的系统上安装 Pyramid Framework

python-3.x - 如何在 Python 中为导入设置别名?

从多个位置导入模块时的 python3 相对导入