根据导入成功定义class方法
Define class method based on import success
我有一些接口 class,如果 numpy 可用,我会为 class(更快的实现)
提供一些额外的方法
可以根据导入成功定义一些函数,但相同的代码不适用于 class 方法。
这个代码
try:
import numpy
def main2():
ret_array= numpy.array([],dtype=numpy.double)
return ret_array
except ImportError:
def main2():
print ("do nothing")
成功定义了一个 main2()
其中 returns 一个空的 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
还有其他方法可以实现吗?
(根据模块的可用性定义不同的 class 方法)
try:
import numpy
class xxx:
def main2(self):
ret_array = numpy.array([],dtype=numpy.double)
print(ret_array)
except:
class xxx:
def main2(self):
print("do nothing")
你可以试试:
class Test:
def test(self):
try:
import numpy
import_succeeded = True
except:
import_succeeded = False
if import_succeeded:
pass
else:
pass
感谢我收到的所有提示
我要使用的解决方案是:
try:
import numpy
except ImportError:
numpy = None
class xxx:
if numpy:
def main2():
ret_array= numpy.array([],dtype=numpy.double)
return ret_array
else:
def main2():
print ("do nothing")
(再次)导入第一个版本的 main2() 中的模块将起作用。
class xxx:
try:
import numpy
def main2():
import numpy
ret_array= numpy.array([],dtype=numpy.double)
return ret_array
except ImportError:
def main2():
print ("do nothing")
y = xxx.main2()
print(y)
使用ABC
from abc import ABC, abstractmethod
class ICalculator(ABC):
@abstractmethod
def calculate(self) -> int:
pass
class CalculatorNoNumPy(ICalculator):
def calculate(self):
return 7
class CalculatorWithNumPy(ICalculator):
def calculate(self):
return 9
try:
import YouCantFindMe # TODO: replace with numpy
calculator = CalculatorWithNumPy()
except ImportError:
calculator = CalculatorNoNumPy()
print(calculator.calculate())
我有一些接口 class,如果 numpy 可用,我会为 class(更快的实现)
提供一些额外的方法可以根据导入成功定义一些函数,但相同的代码不适用于 class 方法。
这个代码
try:
import numpy
def main2():
ret_array= numpy.array([],dtype=numpy.double)
return ret_array
except ImportError:
def main2():
print ("do nothing")
成功定义了一个 main2()
其中 returns 一个空的 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
还有其他方法可以实现吗? (根据模块的可用性定义不同的 class 方法)
try:
import numpy
class xxx:
def main2(self):
ret_array = numpy.array([],dtype=numpy.double)
print(ret_array)
except:
class xxx:
def main2(self):
print("do nothing")
你可以试试:
class Test:
def test(self):
try:
import numpy
import_succeeded = True
except:
import_succeeded = False
if import_succeeded:
pass
else:
pass
感谢我收到的所有提示
我要使用的解决方案是:
try:
import numpy
except ImportError:
numpy = None
class xxx:
if numpy:
def main2():
ret_array= numpy.array([],dtype=numpy.double)
return ret_array
else:
def main2():
print ("do nothing")
(再次)导入第一个版本的 main2() 中的模块将起作用。
class xxx:
try:
import numpy
def main2():
import numpy
ret_array= numpy.array([],dtype=numpy.double)
return ret_array
except ImportError:
def main2():
print ("do nothing")
y = xxx.main2()
print(y)
使用ABC
from abc import ABC, abstractmethod
class ICalculator(ABC):
@abstractmethod
def calculate(self) -> int:
pass
class CalculatorNoNumPy(ICalculator):
def calculate(self):
return 7
class CalculatorWithNumPy(ICalculator):
def calculate(self):
return 9
try:
import YouCantFindMe # TODO: replace with numpy
calculator = CalculatorWithNumPy()
except ImportError:
calculator = CalculatorNoNumPy()
print(calculator.calculate())