繁体   English   中英

"<i>Getting an AttributeError:<\/i>获取属性错误:<\/b><class> <i>has no attribute<\/i>没有属性<\/b><method>"

[英]Getting an AttributeError: <class> has no attribute <method>

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

class blahblah:
   def foobar(self, bvar, **dvar)
       ////
       return dvar

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

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

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

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

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

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

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

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

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

错误的:

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

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

"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM