English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Pythonの中でインスタンスメソッド、クラスメソッド、静的メソッドの簡単な説明

Pythonのコードを学ぶ際に、あるクラスのメソッドでは最初の引数がclsで、あるいはselfであることに気づきました。調べてみると、Pythonはクラス内のメソッドの最初の引数の名前には制限はありません。selfもしくはclsが使用できますが、一般的な使い方としては、selfはインスタンスメソッドで使用され、clsはクラスメソッドで使用され、静的メソッドではデフォルトの引数は使用されません。以下のコードでは、InstanceMethodクラスのメソッドの最初の引数はデフォルトのselfです。ここではselfをどのような名前に変更しても影響はありません。クラスを呼び出す際には、引数の数に従わなければなりません(引数には*argsは例外です。例えば、}}13行で、クラスを呼び出す際に引数がなくなる場合、エラーが表示されます。同様に、インスタンスメソッドの引数の数も必要な数に満たさなければなりません。例えば、16行では、インスタンスメソッドの主要な特徴であるオブジェクトにバインドする必要があります。Python解析器は自動的にインスタンス自身をメソッドに渡します。14行で直接InstanceMethod.fを使用するとエラーが発生します。1()を呼び出すことはできません。

 class InstanceMethod(object):
 __init__(self, a):
  self.a = a
 def f1(self):
  print 'This is {0}.'.format(self)
 def f2(self, a):
  print 'Value:{0}'.format(a)
if __name__ == '__main__':
 # im = InstanceMethod()
 im = InstanceMethod('233')
 im.f1()
 # im.f2()
 im.f2(233)

静的メソッドとクラスメソッドはそれぞれ修饰子を使用する必要があります。それらはstaticmethodとclassmethodです。静的メソッドはクラスに関係がありません。私はこれをクラス内に包装された一般メソッドだと思います。以下の例では、静的メソッドを呼び出す際にインスタンスを使用するかどうかに関係ありません。クラスメソッドでは、デフォルトの最初の引数はclsを使用し、クラスメソッドはインスタンスを使用せずに直接クラスを呼び出すこともできます。これら3つの異なるメソッドの使用方法は以下の例に示されています。では、インスタンスメソッドがある以上に、クラスメソッドや静的メソッドがどのような利点があるのでしょうか?

クラスメソッドでは、インスタンスを使用するかどうかに関わらず、クラス自体を最初の引数として渡されます。この引数はクラス自身です。このクラスメソッドを使用するクラスを継承すると、そのすべてのサブクラスもこのメソッドを持ち、メソッドは自動的にサブクラス自身を指します。この特性はファクトリーファンクションでは非常に役立ちます。静的メソッドはクラスとインスタンスに関係がなく、一般メソッドで代替できますが、静的メソッドを使用することでコードをよりよく構成し、コードが大きくなった後でも混乱を防ぐことができます。クラスメソッドは静的メソッドに代わりできます。静的メソッドは継承では変更できません。

class test(object):
 def instance_method(self):
  print 'This is {0}'.format(self)
 @staticmethod
 def static_method():
  print 'This is static method.'
 @classmethod
 def class_method(cls):
  print 'This is {0}'.format(cls)
if __name__ == '__main__':
 a = test()
 a.instance_method()
 a.static_method()
 a.class_method()
 print '"'----------------------------------------'
 # test.instance_method()
 test.static_method()
 test.class_method()

これでこの記事のすべての内容が終わります。この記事の内容が皆様の学習や仕事に少しでも役立つことを願っています。また、ナイアラ教程を多くのサポートをお願いします!

声明:この記事の内容はインターネットから取得しており、著作権者は所有しておりません。インターネットユーザーにより自発的に貢献し、アップロードされました。このサイトは所有権を持ちませんし、編集も行っていません。著作権侵害が疑われる内容を見つけた場合は、以下のメールアドレスにご連絡ください:notice#oldtoolbag.com(メールを送信する際は、#を@に置き換えてください。告発を行い、関連する証拠を提供してください。一旦確認が取れましたら、このサイトは即座に侵害が疑われるコンテンツを削除します。)

おすすめ