【发布时间】:2022-01-11 04:16:37
【问题描述】:
我有一些接口类,如果 numpy 可用,我会为该类提供一些额外的方法(更快的实现)
可以根据导入成功定义一些函数,但相同的代码不适用于类方法。
这段代码
try:
import numpy
def main2():
ret_array= numpy.array([],dtype=numpy.double)
return ret_array
except ImportError:
def main2():
print ("do nothing")
成功定义了一个main2(),它返回一个空的numpy数组
但是这段代码
class xxx:
try:
import numpy
def main2():
ret_array= numpy.array([],dtype=numpy.double)
return ret_array
except ImportError:
def main2():
print ("do nothing")
导致异常
如果我尝试拨打main2()
xxx.main2()
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
File "test2.py", line 17, in main2
ret_array= numpy.array([],dtype=numpy.double)
NameError: name 'numpy' is not defined
还有其他方法可以实现吗? (根据模块的可用性定义不同的类方法)
【问题讨论】:
-
因为您的
import numpy在类内,所以numpy成为类变量(xxx.numpy代替numpy会起作用,尽管我怀疑这不是推荐的方法) . -
您可以尝试检查导入的模块是否存在:stackoverflow.com/questions/4858100/…
-
一种可能的方法是(在顶部,在类之外)
try: import numpyexcept ImportError: numpy=None,然后在你的类定义中你可以使用if numpy:....else:。 ... 使用main2的替代定义,具体取决于numpy是否可用。任何对numpy的引用将只使用numpy而不必使用xxx.numpy。
标签: python class python-import