見出し画像

【Python】self,initを理解するお話。

以前の記事で、Pythonでルーレット作成しました。

今日は作成に当たってpythonを使う中で、構文理解に時間がかかったselfやらinitをしっかり理解しようというモチベーションのもと、この記事を書いてます。やっぱ自分で説明しようとすると自分にも身につくもんです。ではでは。

Pythonでのクラスの扱い

pythonではクラスを使って関数を便利に(可読性よく)扱うことが出来ます。
普通に関数を書くと

python.py

def some_function(something):
    print(something)

となりますが、クラスを利用する場合は

python_class.py

class some_class:
    def __init__(self,something):
        self.something = something

    def some_function(self):
        print(self.something)

のような記述になります。
クラスを用いる理由としては

✔️大規模ソフトウェア構築の際の効率化

が主たるものとしてあげられます。小規模の場合、関数をまとめずにガツガツ記載してしまっても混乱は少ないように考えられますが基本的にはまとめて記載した方が可読性が上がります。

クラスの有効活用は

✔️グローバル変数を無くし全ての変数を何らかのスコープに属させる
✔️処理を効率的に使い回す
✔️一つの処理は一つの箇所に実装して、修正箇所を最小化する
✔️関数実行中に関数自体が再度呼び出される時の対処(再帰対処)

のメリットを得るために重要です。
(上記についてはこちらの記事が大変参考になりました。pythonはオブジェクト指向が後付けである、と言うお話。)

クラスとインスタンスについて

pythonのクラス構造はインスタンスの生成によりその処理が実行できるようになります。
ここで、
インスタンス=例、事例
のことです。以下のコードの場合

instance.py

a = some_class("some_value")

変数aのことをインスタンスとなります。
上述したコードのクラス(some_class)のインスタンスを生成していることになります。

インスタンスを生成することで

✔️クラスの中で記述
✔️関数を呼び出す

ことが出来ます。
以上のコードをまとめて書くと以下のようになります。

class some_class:

    def __init__(self,something):
        self.something = something

    def some_function(self):
        print(self.something)

a = some_class("some_value")
a.some_function()
#関数としてprintを用いているのでsome_valueを返す

selfの役割

pythonの勉強を始めたて、(self)の記載の意味がよくわかりませんでした。色々な記事の説明としては

✔️インスタンス自身
✔️その時点の自分
✔️メソッドの仮引数

などなどの説明がありました。まあ要するにクラスを書く際の最初の呪文構文として必要なもの、って事で覚えておくことにしました。

initの役割

self同様突如現れた

__init__

についても調べました。

✔️コンストラクタ、と呼ばれる初期化のためのメソッド(関数)
✔️インスタンス化するために最初に必ず呼び出される特殊なメソッド(関数)
✔️オブジェクト生成(インスタンス生成)のついでにデータ初期化を行うもの

などなど。

class some_class:
    def __init__(self,something):#constructor
        self.something = something

クラス構造で情報を保持するために重要なもの。という理解をしました。
これらの構文によってオブジェクト生成時の情報の追加が簡易的に行うことが出来ます。

class who_amI:
    def __init__(self,name,sex,birthday,tall):
        self.name = name
        self.sex = sex
        self.birthmay = birthday
        self.tall = tall

    def print_name(self):
        print(self.name)

    def print_sex(self):
        print(self.sex)

    def print_birthday(self):
        print(self.birthday)

    def print_tall(self):
        print(self.tall)
a = who_amI("Ndot","man","1994/5/9",177)
#Ndot,男、1994.5.9生まれ、177cmという情報を追加して
 オブジェクト生成

このように1行の記載で多くの情報を持たせることが出来ます。

最後に

self,initについての理解を深めました。
基本的に、決めの覚えておくべき構文ですが何のために記載するかを分かっているだけで、かなり力になるなと思いました。
まだまだ記載量が足りず、たくさんこの記事に戻ってくるようになりそうですが少しずつ身につけていきたいと思います。
ではまた次回。


N



私の常日頃の生活をベースに、皆さんの役に立てたり、探しているものを紹介できたらと思っています。今後もよろしくお願いします!