1

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

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

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

新类的声明在这里。它正在另一个程序中工作。

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

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

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

fchild = parent
fchild.farmer != fchild.farmer
fchild.parent = parent
fchild.cost += 1

结果是一条错误消息:

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

正如我所说,我已经看到有关此主题的其他问题,但我不明白答案,而且我更加困惑,因为它适用于其他程序。我在这里做的事情有问题吗?感谢您的任何回复。

4

1 回答 1

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()

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

于 2013-10-01T02:02:48.940 回答