【发布时间】:2020-04-06 01:30:51
【问题描述】:
我有一个类对象,对象中的一些方法需要 python 包(例如 numpy)。如果我在创建对象之前在主脚本中导入包,则对象中的方法无法识别包已导入。为了解决这个问题,我必须在方法本身中导入所有必要的包,这似乎效率低下,因为该方法被多次调用。有没有其他方法可以确保这些方法可以找到以前导入的包?
这是类对象:
class CCState:
def __init__(self, stateVector = None):
self.fill_vol = 0
self.headspace_vol = 0
self.temperature = 0
self.pressure = 0
self.flowin = 0
self.flowout = 0
self.product = 0
self.viacell_attach = 0
self.viacell_suspend = 0
self.deadcell_attach = 0
self.deadcell_suspend = 0
self.headspace_temperature = 0
self.hdgas_o2 = 0
self.hdgas_n2 = 0
self.hdgas_co2 = 0
self.hdgas_ar = 0
self.dsg_o2 = 0
self.dsg_n2 = 0
self.dsg_co2 = 0
self.dsg_ar = 0
self.glucose = 0
self.glutamine = 0
self.glutamate = 0
self.lacticacid = 0
self.lactate = 0
self.ammonia = 0
self.ammonium = 0
self.bicarbonate = 0
self.carbonate = 0
self.cation = 0
self.proton = 0
self.anion = 0
self.hepes = 0
self.hepesion = 0
self.hydroxyl = 0
self.microcarrier = 0
self.antifoam = 0
self.sulfite = 0
self.rDTT = 0
self.oDTT = 0
self.promoter = 0
self.sulfiteacid = 0
self.sulfate = 0
self.bisulfite = 0
self.fudgeacid = 0
self.fudgeanion = 0
self.fudgebase = 0
self.fudgecation = 0
self.viacell_attach2 = 0
self.serum = 0
self.tris = 0
self.triscation = 0
self.aceticacid =0
self.acetate = 0
self.h3po4 = 0
self.dihydrogenphosphate = 0
self.hydrogenphosphate = 0
self.phosphate = 0
self.names = [i for i in self.__dict__.keys() if i[:1] != '_']
# If a vector has been passed, assign all parameters to values in the vector
if stateVector is not None:
for iName in range(0,len(self.names)):
setattr(self,self.names[iName],stateVector[iName])
def pH(self):
"""Return pH"""
#from math import log
return -log(max(10E-14, self.proton)*0.001,10);
如果我运行此代码,我会收到错误“NameError: name 'log' is not defined”
from helper_functions import *
from scipy.integrate import ode
from math import exp, log
from scipy import interpolate
import numpy as np
from numpy.linalg import norm
from CCState import *
import chemical_reaction_model
import time
temp = CCState()
print(temp.pH())
【问题讨论】:
-
你能发布你的代码吗?在文件开头导入python包应该允许在每个方法中使用包
-
实际上你应该不在方法或函数中进行导入。但是如果你的类不在你的主脚本中,你必须在你的类的模块中导入 numpy,而不是在主脚本中(当然,如果你在主脚本中需要它,你当然也必须在那里导入 numpy)。跨度>
-
@brunodesthuilliers 我试图不导入该方法,但我不确定为什么它找不到我导入的包。当你说导入到类的模块时,你是否建议在 _init_ 中添加导入?
-
不,在定义类的模块顶部。我建议您完成完整的官方 Python 教程(也可以查看 pep8)。
标签: python python-import python-packaging