python AttributeError在我导入的模块中找不到类

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 │ └───

我有一个包,其中包含一个名为rigfuncs3.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