1

私は今、授業のやり方を学び始めたばかりで、理解できないことに出くわしました。クラスがあるとしましょう...

class Area(object):
    def __init__(self, name, items):
        self.name = name
        self.items = items

この方法で Area のインスタンスを開始すると、次のようになります。

impala = Area("Impala", ["shotgun", "salt"])

次に、変数を呼び出します。次のように言います。

print impala.items

それはうまく動作します。ただし、この方法で開始しようとすると:

class impala(Area):
    def __init__(self):
        self.name = "Impala"
        self.items = ["shotgun", "salt"]

そして、同じことをしようとすると、エラーが発生します。「型オブジェクト 'impala' には属性 'items' がありません」

誰かが私が2番目の例で間違っていることと、なぜそれが起こっているのか教えてもらえますか?

4

1 に答える 1

4

クラスと変数に同じ名前を使用しています。impalaそしてimpala、Pythonはインスタンスではなくクラスにアクセスしていると思います。

これを回避するには、変数名についてPEP-8に従い、クラス名を inCapWordsおよび local variablesに指定することをお勧めしますlowercase_with_underscores。当然のことながら、アイテムに名前を付けるときも、同じ名前空間に同じ名前のものが 2 つ含まれないように注意する必要があります。

>>> class Area(object):
...     def __init__(self, name, items):
...         self.name = name
...         self.items = items
... 
>>> class Impala(Area):
...     def __init__(self):
...         self.name = "Impala"
...         self.items = ["shotgun", "salt"]
... 
>>> impala = Impala()
>>> impala.items
['shotgun', 'salt']
于 2012-05-10T15:04:54.087 に答える