python AttributeError在我导入的模块中找不到类
我有一个包,其中包含一个名为rigfuncs3.py的模块python AttributeError在我导入的模块中找不到类,python,class,module,package,attributeerror,Python,Class,Module,Package,Attributeerror,我有一个包,其中包含一个名为rigfuncs3.py的模块 SDNpackage/ __init__.py rigfuncs3.py 代码: 名为play_04.py的脚本从包中导入模块rigfuncs。 代码: 运行play_04时,我得到错误信息: AttributeError:“rig”对象没有属性“getRigName” 我不知道为什么,有什么想法吗?我仍然无法复制您遇到的问题 我试图复制您声明的文件夹结构,如下所示: C:. │ play_04.py │ └───
SDNpackage/
__init__.py
rigfuncs3.py
代码:
名为play_04.py的脚本从包中导入模块rigfuncs。
代码:
运行play_04时,我得到错误信息:
AttributeError:“rig”对象没有属性“getRigName”
我不知道为什么,有什么想法吗?我仍然无法复制您遇到的问题 我试图复制您声明的文件夹结构,如下所示:
C:.
│ play_04.py
│
└───SDNpack2
rigfuncs3.py
__init__.py <--- empty file
播放\u 04.py:
class rig():
def __init__(self, rigNumber, leftNozPlate, rightNozPlate, bottomNozPlate, row1_centre_focus):
self.rigNumber = rigNumber
self.leftNozPlate = leftNozPlate
self.rightNozPlate = rightNozPlate
self.bottomNozPlate = bottomNozPlate
self.row1_centre_focus = row1_centre_focus
def getRigName(self):
return self.rigNumber
from SDNpack2 import rigfuncs3
instantiation = rigfuncs3.rig(1, 1000.0, 2000.0, 3000.0, 4000.0)
print(instantiation)
print(instantiation.__dict__)
rig_num = instantiation.getRigName()
print(rig_num)
我将您对dir(实例化)
的调用更改为instantiation.\uu dict\uuu
以仅显示对象的属性,而不是所有内置变量
输出:
<SDNpack2.rigfuncs3.rig object at 0x02B1E628>
{'rigNumber': 1, 'leftNozPlate': 1000.0, 'rightNozPlate': 2000.0, 'bottomNozPlate': 3000.0, 'row1_centre_focus': 4000.0}
1
{'rigNumber':1,'leftNozPlate':1000.0,'rightNozPlate':2000.0,'bottomNozPlate':3000.0,'row1_中心焦点:4000.0}
1.
我可以复制问题本身的唯一方法是更改getRigName
的缩进,或者将其全部从类中删除
您的代码的工作方式与您编写的代码相同,我认为这里没有实际问题。我无法找到您提供的代码的问题。是否确实在
rigfuncs.py
中定义了类rig
?另外,您是否可以更新您的代码,以便只提供复制问题所需的代码?你能为你的包裹提供一个文件夹结构吗?如果您使用的是windows,请移动到软件包的“root”目录,并发出命令tree/f
,同时为我们提供该输出。显示的代码是两个文件的总代码,我通过从rigfuncs import rig在play_02中添加另一个导入来修复它。这解决了这个问题,但将我转移到另一个问题。我能看到您的问题发生的唯一方式是您污染了包内的命名空间(这似乎是因为您多次重用了rig
)。请通读并相应地更新您的代码,以便我们能够帮助您找到根本原因。@HampusLarsson谢谢,我将阅读此文。@HampusLarsson您好,我已经阅读了文档,并完全更改了问题,以重新反映简化的代码和结构。我只使用init.py和rigfuncs3.py创建了一个新包,它也可以工作。我接受了你的回答,因为你在评论中建议可能是包结构。我不知道实例化。dict给出了属性-我不知道所有私有方法都做什么,谢谢你,汉普斯。你的帮助在过去几天里帮助我学到了很多东西。@Windy71当你对一个对象调用dir
时,你正在显示该对象内部的所有“东西”。其中一些有时被称为“魔术方法”,可以改变对象的行为。你可以阅读更多关于他们的信息。尝试开始实现它们的两个最好的方法是\uuuurepr\uuuuu
和\uuuu str\uuuuu
,它们分别处理类如何处理来自repr()
和str()
的调用。如果未定义\uuuu str\uuuu
,则它会自动返回调用\uuuu repr\uuuu
。
from SDNpack2 import rigfuncs3
instantiation = rigfuncs3.rig(1, 1000.0, 2000.0, 3000.0, 4000.0)
print(instantiation)
print(instantiation.__dict__)
rig_num = instantiation.getRigName()
print(rig_num)
<SDNpack2.rigfuncs3.rig object at 0x02B1E628>
{'rigNumber': 1, 'leftNozPlate': 1000.0, 'rightNozPlate': 2000.0, 'bottomNozPlate': 3000.0, 'row1_centre_focus': 4000.0}
1