16

我正在模块 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

你能帮我吗?提前致谢

4

8 回答 8

35

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

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

于 2012-12-26T22:14:12.803 回答
3

非常老的问题,但我引用 @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/…)

特别是,我解决了重新运行正在导入我的课程的单元的问题。

于 2019-01-12T23:28:43.733 回答
3

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

于 2016-11-17T23:19:42.427 回答
1

面临同样的问题,直到我意识到我已经用相同的名称命名了两个文件中的类 - 非常愚蠢!

于 2019-06-18T16:32:25.990 回答
1

老问题,但对于那些面临这个问题并且没有其他答案可以帮助你的人来说,这可能会有所帮助。我正在使用Pickle保存一个包含一些数据的整个类,然后再次加载这个类实例,但是我在init上添加了一些类方法和属性,这就是解释器找不到我的类中描述的新属性的原因(它在泡菜对象中加载“旧”类)

于 2020-07-01T13:35:25.163 回答
1

当我遇到这个问题时,我立即开始检查不平衡的缩进、制表符等......一切似乎都是正确的,但错误仍然出现。我走开,回来,又看了看,DUH...,我发现我有一个错字。而不是__init__(),我输入了__inti__()。因此,首先检查所有构造函数的语法。

于 2021-03-16T17:31:46.227 回答
0

就我而言,我只是将 ClassName 添加到方法调用中,它开始工作:

错误的:

import Clases.Class_filename as LWD
articles=LWD.method_name(parameters)

更正:

import Clases.ClassName as LWD
articles=LWD.ClassName.method_name(parameters)

Classes/Class_filename.py 包含如下内容:

class ClassName :
    def method_name(parameters):
     ....
于 2021-09-29T19:56:05.947 回答
0

对于使用 VSCode 的 Jupyter 笔记本,对我有用的是在更改导入文件后重新启动 VSCode。

于 2022-02-04T23:44:55.537 回答