クラスの「メソッド」とは?
Pythonのクラスにおける「メソッド」とは、ある処理のまとまりに名前をつけたものの事で、ざっくりいうと、クラスが持っている関数のことです。
class A(): def __init__(self): self.df=df def A_mean(self):←こいつがクラスメソッド! ~~~~~~~~~~ ~~~~~~~~~~ return
例として,helloworldをプリントする簡単なクラスとクラスメソッドを作ってみます。
class Test(): def helloworld(self): print("Hello World!")
#インスタンスの呼び出し example=Test() #helloworldメソッドを呼び出す example.helloworld()
するとhelloworldと表示されます。クラスメソッドはクラスをもとに作ったインスタンス(オブジェクト/変数)から他のオブジェクトに影響を与える処理を指します。
クラスが持つ関数です。それを持つオブジェクト(変数)の後ろに属性名を付けて変数.属性名()
で、その属性が持つ処理を行うことができます。
メソッドは各オブジェクトに結びついた関数だと考えればOKです。メソッドを使うことで、オブジェクトを操作することが可能です。
私たちがPythonのプログラミングでよく使う処理を引き合いに出してメソッドと属性を見ていきます。クラスの「メソッド」として、代表的なのがリスト型のオブジェクトが持つ.append()
というメソッドです。
test=[a,b,c,d] test.append(e)←test(リスト型)にappend()という属性処理を行っている test ※[a,b,c,d,e]
testはリスト型の性質を持つオブジェクト(変数)なので、.append()という属性の処理を行うことができます。このappend()
はリストに任意のデータを追加するという属性処理なので、実行するとtestにeという新しいデータが追加されます。
もし保有していないメソッドを指定すると「〇〇 has no attribute(このオブジェクトにはそんな属性は付与されていないよ)」というエラーメッセージが帰ってきます。
クラスの「属性(attribute)」とは何か?
オブジェクトはそのデータ型ごとに属性(attribute)を持っています。属性の中には、大きく分けて「変数」と「メソッド(関数)」の2つがあり、変数のことを「プロパティ」、関数のことを「メソッド」といいます。ようはメソッド+プロパティ=属性であり、メソッドは属性の一部だと言えます。
プログラミングをしていてよくあるのが、「・・・このオブジェクト(変数)ってどういう処理ができるんだろう・・・?」という疑問です。まあ大抵はググってライブラリのレファレンス(仕様書)を見ればいいのですが、自作のクラスとかだとたまにどういうメソッドが使えるのか、属性があるのか確認したくなります。
そんなときはPythonにもとから搭載されている関数である※組み込み関数の1つであるdir()
で確認することができます。
※組み込み関数…ライブラリをインポートせずに使えるデフォルトで搭載されているlen()やprint()のことを指します
#dir()でtestの持つ属性を確認する print(dir(test))
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
↑のようにdir()でtestというオブジェクト=変数が持つメソッドを確認できます。dir()の実行結果を目を見るにはfor文を使ったりprint()関数で使用する必要があります。そして、実行結果を見るとappend()などが使えるということがわかると思います。
このようにクラスのもつ変数と関数はdir()で一覧で確認することができます。
終わり
先ほどdir()でオブジェクトの持つ属性を確認しましたが、__len__’, と ‘append’のようにメソッドにも2つの種類が存在します。この__が付いている方が関数でついていない方がメソッドです。この「メソッド」と「関数」の違いについては次の記事で解説します。
コメント