2

このコードを実行すると、「TypeError: 'int' object is not callable」というエラーが表示されます。調査を行ったところ、変数の命名に問題があると思いますか? 誰かが私に何が間違っているのか説明してもらえますか?

class account(object):
    def set(self, bal):
        self.balance = bal
    def balance(self):
        return balance

これが私の実行例です:

>>> a = account()
>>> a.set(50)
>>> a.balance()
Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    a.balance()
TypeError: 'int' object is not callable
4

1 に答える 1

13

balanceインスタンス属性でメソッドをマスクしていますbalance。どちらかの名前を変更します。たとえば、インスタンス属性の名前をアンダースコアで前に保留することで変更できます。

def set(self, bal):
    self._balance = bal

def balance(self):
    return self._balance

インスタンスの属性は、クラスの属性よりも優先されます (データ記述子を除く; propertys と考えてください)。クラス定義のドキュメントから:

クラス定義で定義された変数はクラス属性です。それらはインスタンスによって共有されます。インスタンス属性は、 を使用してメソッドで設定できますself.name = value。クラス属性とインスタンス属性の両方に「<code>self.name」という表記でアクセスできます。この方法でアクセスすると、インスタンス属性は同じ名前のクラス属性を隠します。

于 2013-04-05T19:24:28.327 に答える