我正在模块mod1中的类中创建一个方法,并按如下方式调用它:
class blahblah:
def foobar(self, bvar, **dvar)
////
return dvar
并将其称为:
obj1 = mod1.blahblah()
dvar1 = obj1.foobar(True, **somedictionary)
抛出Attribute error: blahblah has no attribute named foobar
答案 0 :(得分:24)
您描述的错误类型可能仅由不匹配的缩进引起。如果该方法位于您班级的最底层,请稍微在课程中向上移动,问题就会变得明显。
当python解释器遇到不匹配的缩进时(比如说你开始在使用空格缩进的文件底部使用制表符),解释器不会总是抛出错误;它可以简单地忽略文件的其余部分。我刚刚在更新一些原始作者使用不同的空白字符(碰巧与我的Geany标签匹配)的旧代码时遇到了这个问题,并且它让我的循环时间比我想承认的要长很多。 :)
答案 1 :(得分:1)
一个非常老的问题,但是我引用了@Jacquot的评论,因为它解决了我的问题(我在ipython中使用%autoreload)。
For what it's worth, it can also happen when using the %autoreload magic command in jupyter notebook, when you modify some methods in your module code (ipython.org/ipython-doc/3/config/extensions/…)
特别是,我解决了重新运行导入类的单元的问题。
答案 2 :(得分:0)
我有同样的问题,对我而言,当我移动类文件时,它发生了,但我在旧文件夹中留下了.pyo文件,而python仍在读取.pyo文件而不是读取移动的.py文件
答案 3 :(得分:0)
面对同样的问题,直到我意识到我在两个文件中用相同的名称命名了这些类-相当愚蠢!
答案 4 :(得分:0)
旧问题,但是对于那些正面临此问题且其他答案都不能帮助您的人,这可能会有所帮助。我使用的是 Pickle 来保存其中包含一些数据的整个类,然后再次加载该类实例,但是我在 init 上添加了一些类方法和属性。 ,这就是为什么解释器找不到我的类中描述的新属性的原因(它是在pickle对象中加载“旧”类)
答案 5 :(得分:0)
当我遇到这个问题时,我立即开始检查不平衡的缩进、制表符等......一切似乎都正确但错误继续出现。我走开,回来,又看了一眼,呃……,我发现我打错了。我输入的不是 __init__()
,而是 __inti__()
。因此,请先检查所有构造函数的语法。