我是Python的新手,我从编程开始。我写了捆绑在三个软件包中的几个函数。所有软件包都具有BaseFunction,该BaseFunction在三个软件包之外扩展了另一个BaseFunction。
例如,此函数扩展BaseScalingFunctionClass,而此类扩展BaseFunctionClass
隐藏软件包:
from abc import ABCMeta, abstractmethod
import matplotlib.pyplot as plt
class BaseFunctionClass():
def __init__(self):
pass
@abstractmethod
def getValue(self, x: float) -> float:
pass
def plot(self, x):
y = []
for val in x:
y.append(self.getValue(val))
plt.plot(x, y)
plt.show()
在包装内:
import sys
sys.path.append(r"C:\path")
from BaseFunction import BaseFunctionClass
class BaseScalingFunctionClass(BaseFunctionClass):
def __init__(self):
pass
和
from BaseScalingFunction import BaseScalingFunctionClass
import numpy as np
class HaarScalingFunction(BaseScalingFunctionClass):
def __init__(self):
pass
def getValue(self, x: float) -> float:
if(-1/2 < x and x <= 1/2):
return 1.0
return 0.0
def plot(self):
x = np.arange(-2, 2, 0.01)
super().plot(x)
如果我尝试使用以下命令,一切都会正常运行
instance = HaarScalingFunction()
instance.plot()
instance = BaseScalingFunctionClass()
print(instance)
现在,我想编写一个返回两个BaseFunction的标量积的方法。
from numpy import trapz
from BaseFunction import BaseFunctionClass
from ScalingFunctions.HaarScalingFunction import HaarScalingFunction
class Calculation():
def __init__(self):
pass
def innerProduct(self, function1: BaseFunctionClass, function2: BaseFunctionClass) -> float:
return trapz(function1.getValue * function2.getValue)
HaarScalingFunction1 = HaarScalingFunction()
HaarScalingFunction2 = HaarScalingFunction()
calculation = Calculation()
print(calculation.innerProduct(HaarScalingFunction1, HaarScalingFunction2))
如果我尝试运行此命令,则会收到以下异常:
发生异常:ModuleNotFoundError 没有名为“ BaseScalingFunction”的模块
文件“ C:\ path”,模块中的第2行 从BaseScalingFunction导入BaseScalingFunctionClass
文件“ C:\ path”,模块中的第3行 从ScalingFunctions.HaarScalingFunction导入HaarScalingFunction
我不明白,为什么在HaarScalingFunction中不再找到模块BaseScalingFunction,因为它是在我的测试中找到的?
非常感谢您的帮助
Matthias
编辑
我添加了一些插件,发现行
from BaseScalingFunction import BaseScalingFunctionClass
HaarScalingFunction中的是未解决的导入。我将行更改为
from ScalingFunctions.BaseScalingFunction import BaseScalingFunctionClass
,现在错误消失了。这意味着我不详细了解导入的使用方式。如果我在HaarScalingFunction.class中启动代码,而不是从其他类中使用该类,则为什么不使用前一行代码呢?
我假设如果启动文件,则将当前工作目录设置为该文件,因此找到了另一个文件,因为该文件位于同一子文件夹中。在第二种情况下,我启动了另一个文件,因此工作目录不再能够找到我的文件。有人可以确认这一点还是矛盾?