Python:AttributeError:x节点没有属性'y'

use*_*965 1 python attributeerror

这是我之前关于一个项目的另一个问题.

我已经阅读了一些与此相关的其他(已回答)问题,但我根本不理解答案,并希望能够更好地理解.

我正在尝试实现我正在为项目工作的更大程序的简化版本.我遇到的问题是它给了我一个我不理解的错误,它更令人困惑,因为我用于声明类的代码是直接从'完整'代码中提取的,它可以正常工作.

新课程的声明就在这里.它正在另一个计划中工作.

class node:
    def __init__(self):
        self.farmer, self.wolf, self.sheep, self.cabbage = False, False, False, False
        self.parent = None
        self.cost = 0
Run Code Online (Sandbox Code Playgroud)

但是当我尝试将它与此代码一起使用时:

parent = node
fchild = node
schild = node
wchild = node
cchild = node

fchild = parent
fchild.farmer != fchild.farmer
fchild.parent = parent
fchild.cost += 1
Run Code Online (Sandbox Code Playgroud)

结果是一条错误消息:

Traceback (most recent call last):
  File "boolfliptest.py", line 17, in <module>
    fchild.farmer != fchild.farmer
AttributeError: class node has no attribute 'farmer'
Run Code Online (Sandbox Code Playgroud)

正如我所说的,我已经看到了关于这个主题的其他问题,但我不理解答案,我更加困惑,因为它适用于其他程序.我在这里做的事情有什么问题吗?感谢您的回复.

iCo*_*dez 5

__init__类的方法(通常称为"构造函数"方法)仅在创建类的新实例时调用.此外,您尝试访问的所有属性都包含在__init__方法中.这意味着它们是实例属性,只有创建类的实例后才可用.

因此,要解决您的问题,请将这些变量指向该类的实例:

# By adding (), I initialize (create an instance of) class node.
# This means that I will be calling the __init__ method.
parent = node()
fchild = node()
schild = node()
wchild = node()
cchild = node()
Run Code Online (Sandbox Code Playgroud)

就目前而言,您的代码只是将这些变量分配给类本身,而不是它的实例.