Python类(AttributeError:''对象没有属性'')

4

我在我的代码中遇到了问题,因为我对类不熟悉(通常也是Python,所以如果我把东西命名错误了,很抱歉)。我收到了这个错误:

我认为我的代码太冗长了,无法在此处包含,因此我制作了一个简化版本来测试下面的概念。

问题是:如何创建一个新的self对象“self4”? 然后将其提供给类中的其他函数。目前我得到了这个错误。

AttributeError:'className'对象没有'self4'属性

class className(object):

   def __init__(self, self1=1,self2=2,self3=3):
        self.self1=self1
        self.self2=self2
        self.self3=self3

   def evaluate(self, self5):
        print className.func1(self) + className.func2(self)
        self.self5=self5
        print className.func1(self)

   def func1(self):
       return self.self1 + self.self5

   def func2(self):
       self.self4 = self.self1+self.self2+self.self3
       return self.self4

文件名 tester.py

import tester.py

mst=tester.className()

mst.evaluate()

1
为什么你不在__init__中调用self.func2()呢? - falsetru
我已经添加了如何调用这段代码的内容。我希望能够根据不同条件调用evaluate,例如self1=4和self1=3。 - William Baker Morrison
1
我刚刚运行了你问题中的代码,它可以正常工作...它会打印出7 6。这个问题是无效的... - Pandrei
4个回答

4

编辑:
你的代码运行良好!
问题出在哪里?

我仍然认为将 self4 移到 init 方法中会更好。

原始内容:
我认为最合理的做法是在 init 方法中定义 self4

class className(object):
    def __init__(self, self1=1, self2=2, self3=3):
        self.self1 = self1
        self.self2 = self2
        self.self3 = self3
        self.self4 = None

   #rest of class

确实如此,我现在刚试了一下。因此基本上没有错误,也就没有问题了吧?! - JDurstberger

4
如果有人仍然遇到这个问题:当您的缩进出错时,会出现此错误。要解决上述问题,您只需要在最后两个函数定义之前添加一个空格,即可解决。请注意保持HTML标签不变。
class className(object):
    

    def __init__(self, self1=1,self2=2,self3=3):
        self.self1=self1
        self.self2=self2
        self.self3=self3

    def evaluate(self, self5):
        
        print className.func1(self) + className.func2(self)
        self.self5=self5
        print className.func1(self)

    def func1(self):
        return self.self1 + self.self5

    def func2(self):
        self.self4 = self.self1+self.self2+self.self3
        return self.self4

只需确保它们都具有相似的缩进,您就可以开始了。


0

如果有人遇到这个错误,而且不是缩进问题,请注意,如果您在类型注释中意外写了 ; 而不是 :,也可能会出现此错误:

>>> class Example:
...     def __init__(self, var: str) -> None:
...         self.var; str = var
... 
>>> Example('foo')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in __init__
AttributeError: 'Example' object has no attribute 'var'

0

您应该在方法中传递 self4 参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接