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