2017-07-11 9 views
1

メソッドの最初のパラメータは、メソッドが呼び出されたインスタンスです。 printName()不足している1つの必要な位置引数:「名前」 は、私は私がこの"self"を使用する場合、Pythonには位置指定の引数が必要です

class A: 
    def printName(self, name): 
     print(name) 

A.printName("asd") 

を書くとき、私はそのエラーはTypeErrorを取得理由を理解いけません。 私は行方不明ですか?

+1

[TypeError:必要な1つの位置引数が見つかりません: 'self'](https://stackoverflow.com/questions/17534345/typeerror-missing-1-required-positional-argument-self) –

答えて

2

あなたは、クラスのインスタンスを作成し、そのインスタンス上でメソッドを呼び出す必要があります:あなたは、そのクラスのインスタンスを作成せずにprintName()を呼び出したい場合はstaticmethodを使用して、

class A: 
    def printName(self, name): 
     print(name) 

class_instance = A() 
class_instance.printName("asd") 
+0

答えに感謝します。 A.printName( "asd")はインスタンスではありません。 – akerbeltz

+0

Aはクラスオブジェクトで、A()は新しいクラスインスタンスです。 – Andrea

+0

ドキュメントをご覧ください:https://docs.python.org /2/tutorial/classes.html クラスについての基礎を知ることはかなり重要です。楽しむ! – Andrea

0

これは働くだろう

class A: 
    @staticmethod 
    def printName(name): 
     print(name) 

A.printName('hello') 
+0

答えをありがとう。 Pythonで静的メソッドとは何かを説明することができます、なぜそれが '自己'を必要としないのですか? あなたのコードを試しましたが、@staticmethodなしでも動作します、なぜですか? 質問量は申し訳ありませんが、私は「self」の引数がどのように働いているかを理解するのに苦労しています – akerbeltz

+1

@erberbeltz :) ** staticmethods **はオブジェクトではなくクラスにバインドされたメソッドです。クラスインスタンスは必要ありません。 '@ staticmethod'は' staticmethod'を使用していることを示します。以前のバージョンでは、** staticmethod **の構文が異なっていました。あなただけのgoogleの詳細については、 – ksai

+0

自己は、 'this'オブジェクトに相当します。 staticmethodはクラスにバインドされている別のインスタンスではありません。 – gout

関連する問題