1

Python リストを入力パラメーターの 1 つとして受け取るメソッドを定義しようとしています。対照的に、通常の関数はリストを入力パラメーターとして問題なく受け入れます。どうして?

    # Simple function that works
    def func(param1, param2):
    for item in param1:
        print item+" "+param2

    var1 = ['sjd', 'jkfgljf', 'poipopo', 'uyuyuyu']
    var2 = 'is nonsense'

    func(var1, var2)

    # Simple function produces the following output:
    # sjd is nonsense
    # jkfgljf is nonsense
    # poipopo is nonsense
    # uyuyuyu is nonsense

次のようなクラス内のメソッドで同様の効果を得ようとすると:

   # Simple class
    class test():
        def __init__(self):
            pass

        def test_method(par1, par2):
            for itm in par1:
                print itm+" "+par2

    # This executes with no error
    obj = test()

    # This fails
    obj.test_method(var1, var2)

    # Error message will be:
    #   Traceback (most recent call last):
    #     File "<stdin>", line 1, in <module>
    #   TypeError: test_method() takes exactly 2 arguments (3 given)

非常に基本的なものが欠けているようです。どんな助けでも大歓迎です。

4

2 に答える 2

6

クラスのデータ メンバーにアクセスしたい場合は、次のようにselftest_methodを渡す必要があります。

def test_method(self, par1, par2):

test_methodクラスのデータ メンバーにアクセスする必要がない場合は、静的メソッドとして宣言します。

@staticmethod
def test_method(par1, par2):

参考までに、数値を保持するクラスがあり、メソッドでその数値を返したいとしましょう。また、2 つの数値の積を与える別のメソッドがありますが、クラスには依存しません。これを行う方法は次のとおりです。

class myClass(object):
    def __init__(self, num):
        self.number = num

    def getNum(self):
        return self.number

    @staticmethod
    def product(num1,num2):
        return num1*num2

if __name__ == "__main__":
    obj = myClass(4)
    print obj.getNum()
    print myClass.product(2,3)

プリント:
4
6

于 2013-10-27T04:55:38.107 に答える
2

変更するだけです:

def test_method(par1, par2):

def test_method(self, par1, par2):
于 2013-10-27T04:52:17.420 に答える