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 に答える