2017-10-31 4 views
-1

。そのオブジェクトに属していないメソッドを呼び出すと、 "リストオブジェクトにはその属性がありません"というエラーが表示されることを理解しています。私の質問は、なぜ人々はメソッドを使うのではなく、ここで属性を使うのですか?正確に言えば、方法でなければならないのですよね?皆さん、ありがとうございました。なぜエラーメッセージは "リストオブジェクトにメソッド*()"があるのではなく、リストオブジェクトに属性*()がありませんのようなものですか?

+0

を言っていないですか? –

+0

メソッドは_クラスの属性です。それは単なる呼び出し可能な属性です。 – wpercy

答えて

4

some_list.foo() 

のような操作で使用すると、1つとして考えている2つのステップがあります。

some_list.foo 

をし、それを呼び出す:属性を取得し、いくつかの他の言語とは異なり

  () 

を、これらは完全に独立した手順です。 some_list.foo属性アクセスを担当するコードは、属性を呼び出す予定があることを認識していません。存在しない属性を取得しようとしていることがわかります。それがその属性です。

0

方法は、属性、具体的には呼び出し可能な属性であるです。属性は、オブジェクトにスコープされたものを含む、より一般的な用語です。たとえば:

0

Pythonには一般的な方法がないため(メソッドは単にクラスに関連付けられた関数です)。典型的な呼び出しは次のようになります。

x.foo (bar) 

しかし、これはまさにこれと同じである:

m = x.foo 
m (bar) 

エラーが最初のステップで起こり、そしてこの時点でfooは単なる属性であることは明らかです、属性getterは後で何が行われるか分かりません。次AST(抽象構文木)を生成a.bar()のPythonを呼び出すとき

class A: 

    def foo(): 
     return "a" 

a = A() 
a.bar() 

::次のコードを考慮

0

Call(
    func=Attribute(
     value=Name(id='a', ctx=Load()), 
     attr='bar', 
     ctx=Load() 
    ), 
    # ... 
) 

Pythonがやるしようとするまず最初に属性を得ている、と呼び出し可能かどうかをチェックします。属性が存在しない場合は、Attributeが最初に失敗し、関連付けられたエラーA object has no attribute barが発生します。あなたが属性を見つけることができない場合

お知らせそれはメソッドまたはない場合はどのようにあなたが言うのです... A object has no attribute bar()

関連する問題