スポンサーリンク

Pythonのオブジェクト指向を理解する③~クラスの「メソッド」と「属性」とは何か?

クラスの「メソッド」とは?

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つの種類が存在します。この__が付いている方が関数でついていない方がメソッドです。この「メソッド」と「関数」の違いについては次の記事で解説します。

スポンサーリンク

プログラミングの独学はとても難しい


プログラミングは小学校の義務教育にも導入され始めており、これから社会人として生きていく上でプログラミングはもはや出来て当たり前、出来なれば論外というエクセルレベルの必須スキルになりつつあります。そしてそういう話を聞いて参考書なりを購入して独学でプログラミング勉強しようと思っている人も少なくないでしょう。しかしプログラミングを独学で勉強し始めようと思うものの



・「分からない箇所で詰まって挫折してしまった」

・「勉強する時間が足りない」

・「ネットの記事だと情報が断片的でよくわからない」

・「コードのエラーの原因が分からない」



という壁にぶち当たって、プログラミングの勉強を止めてしまう方が少なくありません。独学でプログラミングを勉強してる時間のほとんどはつまづいている時間です。実際僕も最初のころ独学でプログラミングを勉強していた頃はエラーの原因が分からず丸1日を不意にしてしまった・・・そんな苦い経験がありました。



それで僕は一度はプログラミングの学習を諦めてしまいましたが、就活で現実を知る中で「プログラミングを勉強して、いずれフリーランスとして自由な生き方がしたい」「エンジニアとして若いうちから高収入を得たい」という気持ちから一念発起して「侍エンジニアのwebサービスコース」に申し込み、プロのエンジニアの方に対面でマンツーマンでPythonによるWebサービス作り方とWeb技術の基本を教えてもらい、ようやくプログラミングが理解でき、今ではエンジニアとしてそこそこの暮らしができるようになりました。





侍エンジニアでは、とりあえずプログラミングやインターネットの基本を知っておきたい人から、HTML・cssなどでWebサイトやWebアプリを作ってみたい人やPythonを勉強してデータサイエンティストやAIエンジニアになりたい人まで幅広いニーズに応えた様々なコースが用意されています。



IT業界と言ってもエンジニアの仕事はプログラミング言語次第でサーバーから機械学習・ディープラーニングまで多種多様ですし、侍エンジニアの無料レッスン(カウンセリング)を受けてみて、自分のやりたいITの仕事は何なのか?を見つけるのがエンジニアへの第一歩になります。ちなみに今侍エンジニアの無料レッスンを受けると1000円分のAmazonギフト券がもらえるので、試しに受けてみるだけもお得です。


自分は半端に独学やオンラインスクールで勉強して金と時間を無駄にするくらいなら、リアルのプログラミングスクールに通ってしっかりプログラミングを勉強した方がいいと思います。ちなみに今、侍エンジニアに申し込むと、25歳以下の学生の方であれば、受講料が20%OFFになるので超お得です。


そして、プログラミングは大勢で授業を受けたり漫然とオンライン学習をするよりも自分が分からない箇所をピンポイントでプロの講師に直接質問して、ちゃんと納得するというスタイルの方がお金は確かに少し掛かりますが、独学で学ぶよりも絶対にモノになります。


シェアする

  • このエントリーをはてなブックマークに追加

フォローする