2009-04-06 11 views
2

私はPythonが初めてです。私はクラスで単純な関数を定義して実行しようとしていました。Pythonの関数定義

誰も私のコードで間違っているものを私に教えてくださいすることができ:

class A : 
    def m1(name,age,address) : 
     print('Name -->',name) 
     print('Age -->',age) 
     print('Address -->',address) 


>>> a = A() 
>>> a.m1('X',12,'XXXX') 
Traceback (most recent call last): 
    File "<pyshell#22>", line 1, in <module> 
    a.m1('X',12,'XXXX') 

を私はエラー
はTypeError下に取得しています:()m1は、正確に3位置引数(4は、与えられた)ことで

答えて

19

インスタンスメソッドは、最初の引数としてインスタンスを取る:あなたはまた、静的な関数を作成するために@staticmethod decoratorを使用することができます

class A : 
    def m1(self, name,age,address) : 
     print('Name -->',name) 
     print('Age -->',age) 
     print('Address -->',address) 

class A : 
    @staticmethod 
    def m1(name,age,address) : 
     print('Name -->',name) 
     print('Age -->',age) 
     print('Address -->',address) 
4

を取りますクラスインスタンス内のメソッドは、selfという名前の第1引数としてオブジェクト参照を受け取ります。

>>> class A: 
...  def m1(self,name,age,address): 
...   print('Name -->',name) 
...   print('Age -->',age) 
...   print('Address -->',address) 
...   
>>> a=A() 
>>> a.m1('X',12,'XXXX') 
('Name -->', 'X') 
('Age -->', 12) 
('Address -->', 'XXXX') 
>>> 
+0

これはクラスメソッドではなく、インスタンスメソッドです。 – vartec

+0

http://docs.python.org/library/functions.html#classmethod – vartec

4

最初のパラメータは常にオブジェクトそのものです。

class A : 
    def m1(self, name,age,address) : 
     print('Name -->',name) 
     print('Age -->',age) 
     print('Address -->',address)