2016-10-22 10 views
0

私はそのクラスで定義されているのと同じクラスの中で、基本的な関数(メソッド)を使いたいと思っています。Python:メソッドMはクラスCのプロパティです。それをCの中でどのように使うのですか?

私は理由はわかりませんが、selfで何かする必要があります。

これは動作します:

class What(object): 
    def worksOnlyOutside(self, a): 
     print a ** 2 

    def worksOnlyInside(b): 
     print b ** 3 

    worksOnlyInside(2) 
     #prints out 8 

What().worksOnlyOutside(3) 
    #prints out 9 

は、これは動作しません:

class What(object): 
    def worksOnlyOutside(self, a): 
     print a ** 2 

    def worksOnlyInside(b): 
     print b ** 3 

    worksOnlyOutside(2) 
     #prints out "TypeError: worksOnlyOutside() takes exactly 2 arguments (1 given)" 

What().worksOnlyInside(3) 
    #prints out "TypeError: worksOnlyInside() takes exactly 1 argument (2 given)" 

を私はクラスの外部インスタンスとしてそれをしたい場合は、私が必要であることを理解していることから、パラメータself。さらに、内部的に使用するには、selfをパラメータとして渡すことをスキップする必要があります。

ボトムライン:クラス内で使用でき、そのクラス外のプロパティとして呼び出すことができるメソッドが必要な場合はどうすればよいですか?

クラスBasic Mathsは、方法squaredを持っています。 intの二乗はあなたがたくさん行うことなので、クラスの内部と外部の両方で必要になるでしょう。 2つの異なるメソッド(外部で使用されるself、内部で使用されないメソッド)を定義する以外に、別のオプションが必要です。

ありがとうございます。

+0

クラスメソッドを作成するには、worksOnlyOutsideコードが正しいはずです。クラス内のメソッドを呼び出すには、self.worksOnlyOutside(2)を使用します。 – Skycc

答えて

0

関数がインスタンスメソッドである場合、その最初のパラメータはselfへの参照である必要があります。

最初の例では、Pythonは、メソッドが静的に呼び出されることを認識しており、最初のパラメータをselfにする必要はないと認識しています。あなたはメソッドがインスタンスメソッドであることを意図している場合

  • はあなたが静的である方法をする場合、selfパラメータ
  • を持っていない、最初のパラメータはselfことがあります。
関連する問題