Python 获取AttributeError:<;类别>;没有属性<;方法>;

Python 获取AttributeError:<;类别>;没有属性<;方法>;,python,attributeerror,Python,Attributeerror,我正在模块mod1中的类中创建一个方法,并按如下方式调用它: class blahblah: def foobar(self, bvar, **dvar) //// return dvar 并称之为: obj1 = mod1.blahblah() dvar1 = obj1.foobar(True, **somedictionary) 它抛出一个属性错误:blahblah没有名为foobar的属性 你能帮我吗?提前感谢您所描述的错误类型可能只是由不匹配的缩进引

我正在模块mod1中的类中创建一个方法,并按如下方式调用它:

class blahblah:
   def foobar(self, bvar, **dvar)
       ////
       return dvar
并称之为:

obj1 = mod1.blahblah()
dvar1 = obj1.foobar(True, **somedictionary)
它抛出一个
属性错误:blahblah没有名为foobar的属性


你能帮我吗?提前感谢

您所描述的错误类型可能只是由不匹配的缩进引起的。如果该方法位于类的最底层,则将其在类中上移一点,问题就会变得明显


当python解释器遇到不匹配的缩进时(比如说您开始在缩进了空格的文件底部使用制表符),解释器不会总是抛出错误;它可以忽略文件的其余部分。就在今天,我在更新一些旧代码时遇到了这个问题,原作者使用了不同的空格字符(恰好与我的Geany标签匹配),这让我陷入了一个循环,时间比我想承认的要长得多。:)

我也遇到了同样的问题,对我来说,在我移动类文件时发生了这种情况,但我在旧文件夹中留下了一个.pyo文件,python仍然在读取该.pyo文件,而不是读取移动的.py文件。

非常老的问题,但我引用了@Jacquot的评论,因为它解决了我的问题(我在ipython中使用了%autoreload)


值得一提的是,在jupyter笔记本中使用%autoreload magic命令时,当您修改模块代码(ipython.org/ipython doc/3/config/extensions/…)中的某些方法时,也会发生这种情况。


特别是,我解决了重新运行导入我的类的单元格的问题。

遇到了同样的问题,直到我意识到我在两个文件中都用相同的名称命名了类-非常愚蠢

这是一个老问题,但对于那些面临这个问题的人来说,其他答案都帮不了你,这可能会有所帮助。我正在使用Pickle保存一个包含一些数据的整个类,并再次加载这个类实例,但是我在init上添加了一些类方法和属性,这就是为什么解释器找不到类中描述的新属性(它正在加载“旧”属性)当我遇到这个问题时,我立即开始检查不平衡的缩进、制表符等。。。一切似乎都是正确的,但错误继续出现。我走开了,回来了,又看了一眼,然后……我发现我有一个打字错误。我没有输入
\uuuu init\uuuu()
,而是输入了
\uuuu initi\uuuu()
。因此,请首先检查所有构造函数的语法。

显然,无论出于何种原因,您都没有发布实际使用的代码。那很好。但是根据你的帖子,没有什么错。您确定您的真实代码中没有输入错误(可能是您意外地将
foobar
拼写为
fubar
,等等)?只有
foobar
不是
blahblah
中定义的方法时,才会发生此错误。因为您断言它是这样定义的,所以您不应该看到这个错误。你确定
foobar
是在真实代码的
blahblah
中定义的吗?你定义了
blahblah
两次了吗?一次定义了
foobar
,一次不定义?(即覆盖您以前的定义)@user1778309请发布真实代码的相关摘录。您假设的是真的,实际上是假的。看看
dir(mod1.blahblah)
(是否
foobar
在那里?),
dir(obj1)
(是否
foobar
在那里?),
obj1.\uuuu class\uuuuuuuuuuu
(是否
mod1.blahblah
),
obj1.\uuuuuu模块
(是不是
mod1
?)等等。谢谢,这很有帮助。我也遇到过同样的问题,在文件中混合使用了制表符和空格进行缩进。在找到答案之前,我已经阅读了大量解释,但没有任何解析。值得一提的是,在jupyter笔记本中使用%autoreload magic命令时,当您在模块代码()中修改了一些方法,这很有帮助!缩进也是我的问题。您确定这就是问题中的问题吗?我没有同样的问题,但也没有找到解决方案。如果其他人偶然发现“我的”的话,请发布此消息问题-他们会在同一个地方找到解决方案。这正是我所做的-值得一提的是,当你重新定义一个类时Python不会出错。谢谢。这是我的问题。我没有足够注意我腌制的内容和时间。