我有一堂课,看起来像这样:
class Foo:
import_extra = false
def __init__(import_extra):
if import_extra:
self.import_extra = true
import extra
def do_thing():
# do some stuff
if self.import_extra:
extra.do_extra_stuff()
该类具有某些取决于extra
的功能,但是我希望能够在初次初始化该类时(在运行应用程序开始时发生一次)决定该功能是否可用。不幸的是,我似乎无法弄清楚如何为整个类导入extra
以便其他方法可以使用它。
我之所以这样设计,是因为在某些情况下extra
模块可能无法导入。 do_thing
被频繁调用,因此我希望可以避免将import语句放在此处。
有没有更简单的方法可以做到这一点?
答案 0 :(得分:2)
我找到了解决问题的方法:
from importlib import import_module
class Foo:
import_os = False
os = None
def __init__(self, imp):
if imp:
self.import_os = True
self.os = import_module('os')
def do_thing(self):
print("doing thing")
if self.import_os:
print(self.os.devnull) # to verify that os has been imported
# check that it does actually work
print("running foo(false)")
f1=Foo(False)
f1.do_thing()
f2=Foo(True)
print("running foo(true)")
f2.do_thing()
它输出
running foo(false)
doing thing
running foo(true)
doing thing
/dev/null
这正是我想要的功能。
在这里,我使用的是os
而不是extra
,以便任何人都可以运行它。
这些答案帮助我弄清楚了: