📌

オブジェクト?クラス?インスタンス?メソッド?ライブラリ?モジュール?パッケージ?なんじゃそれ!!

2024/12/08に公開

自分がプログラミングをするときに混乱しがちな用語をまとめておきます。

オブジェクトとは


【日本語訳】
Object = 物体

【プログラミング訳】

  • データ(数値、文字列、リストなど)はすべてオブジェクト
  • クラスから作成されるインスタンスもオブジェクト

【自分訳】
クラスという設計書をもとに、インスタンス(実体化)したもの。
変数がオブジェクトになることがおおい。

【詰まった文脈】

  • オブジェクトをインスタンス化する = 物体を実体化する
    • 何もなかったものに機能をつけて一つのものにするということ。

オブジェクトの具体的なコード

#まずは設計書を作る
class Car:
    def __init__(self,brand,color,name):
        self.brand = brand
        self.color = color
        self.name = name

#新しい車を作る(オブジェクトを作る)
my_car = Car("トヨタ","黒","レクサス")

#ブランド名を表示
print(mycar_brand)

クラスとは

【日本語訳】
共通の性質を表す部類・種類
学校のクラスは、生徒・先生・時間割といった共通の性質を持つ物体を表している。

【プログラミング訳】
オブジェクトを作る際の設計書。
クラス(設計書)を見れば、オブジェクトが何個でも生成できる。

【自分訳】
オブジェクトを作るときの元になる設計書
クラスの中で定義されている内容をもとに、オブジェクトを作っていく

具体的なコード(Python)

#車の設計書を作る
class Car:
    def __init__(self,brand,color,name):
        self.brand = brand #ブランドの設定
        self.color = color
        self.name = name

インスタンスとは


【日本語訳】
Instance = 実例・事実

【プログラミング訳】
クラス(設計図)を元に実際に作られたモノ

インスタンス化するって何

クラス(設計書)をもとに実際のモノを作っていく作業のこと

具体的なコード

#車の設計書を作る
class Car:
    def __init__(self,brand,color,name):
        self.brand = brand
        self.color = color
        self.name = name

メソッドとは


【日本語訳】
方法、方式、順序

【プログラミング訳】
オブジェクトができること(機能)

【メモ】
メソッドによって値が変更されるものは、クラス内の関数の引数に入れなくてOK。最初から100キロで走ってるわけじゃなく、メソッド(機能)により、変更されるものなので。ただし、関数内のインスタンス変数で初期値を設定する必要がある。

具体的なコード

class Car:
    def __init__(self,brand,color,name):
        self.brand = brand
        self.color = color
        self.name = name
        self.speed = 0
        self.engine_on =False

    #メソッド(機能をつける)
    def start_engine(self): #エンジン起動のメソッド
        if not self.engin_on:
            print("f{self.name}のエンジンをスタートしました")
            self.engine_on = True
        else:
            print("すでにエンジンはかかっています")

     def accelarate(self,amount):#加速する機能
         if not self.engine_on: 
            print("エンジンがスタートしていません")
            return

         self.speed += amount
         if self.speed > 180:
             self.speed = 180 #180kmを超えたら180kmに制限
             print(f"{self.name}"が最高速度(180km/h)に達しました!)
         else:
            print("f{self.name}が加速しました。現在の速度{self.speed}km/hです。")
            
     def brake(self,amount): #ブレーキ機能
         self.speed -= amount
         if self.speed < 0:
             self.speed = 0
             print("f{self.name}が停止しました")
         else:
            print("f{self.name}"が減速しました。現在の速度:{self.speed}km/h)
    
     def check_speed(self):
         print("f現在の速度:{self.speed}km/h")

#オブジェクト(車)を生成
mycar = Car("トヨタ","赤","レクサス")

#エンジンスタート
mycar.start_engine()

#加速
mycar.accelarate(30)
mycar.accelarate(150)

#速度チェック
mycar.check_speed()

#ブレーキを踏む
mycar.brake(150)

#停車させる
mycar.brake(30)

パッケージとは


【日本語訳】
包み、小包

【プログラミング訳】
関連する機能をまとめたフォルダ
複数のpythonファイル(モジュール)を整理する方法

パッケージの構造例

#フォルダの中身
car_package/
    __init__.py      # これがあるとPythonはパッケージだと認識する
    car.py           # 車の基本機能
    engine.py        # エンジンに関する機能
    speed.py         # 速度に関する機能

パッケージの使い方

#車の基本機能をインポート
from car_package import car
mycar = Car("トヨタ","赤","レクサス")

#エンジンの機能をインポート
from car_package import engine
start_engine(mycar)

#便利な機能を使う
from car_package.utils import calculate_speed
speed = calculate_speed(distance,time)


モジュールとは

【日本語訳】
単位、構成要素、組み立てユニット

【プログラミング訳】
一つの「.py」ファイル
関連する機能をまとめたもの

モジュールの中身

#car.py (車の基本機能)
class Car:
    def __init__(self,brand,color,name):
        self.brand = brand
        self.color = color
        self.name = name
        self.speed = 0
        self.engine_on = False
#engine.py (エンジンの機能)
def start_engine(car): #エンジン起動のメソッド
    if not self.engin_on:
        print("f{self.name}のエンジンをスタートしました")
        self.engine_on = True
    else:
        print("すでにエンジンはかかっています")
#speed.py (速度に関する機能)
def accelarate(car,amount):#加速する機能
    if not self.engine_on:
        print("エンジンがスタートしていません")
        return

    self.speed += amount
        if self.speed > 180:
            self.speed = 180 #180kmを超えたら180kmに制限
            print(f"{self.name}"が最高速度(180km/h)に達しました!)
        else:
            print("f{self.name}が加速しました。現在の速度{self.speed}km/hです。")

def brake(car,amount): #ブレーキ機能
    self.speed -= amount
    if self.speed < 0:
        self.speed = 0
        print("f{self.name}が停止しました")
    else:
        print("f{self.name}"が減速しました。現在の速度:{self.speed}km/h)

def check_speed(self):
    print("f現在の速度:{self.speed}km/h")

使い方

from car import Car
from engine import start engine
from speed import check,brake

my_car = Car("トヨタ","赤","レクサス")
start_engine(my_car) #mycarのエンジンを始動
mycar.accelarate(100)

ライブラリとは

【日本語訳】
書籍・コレクション・図書館・図書室

【プログラミング訳】
誰かが既に作った便利な機能(コード)をまとめたもの
インポートして使える

僕は以下のサイトが大好きでよく見ています。
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

備考 selfについて

設計書の中の関数定義で「self」という第一引数を取っている。この意味も補足しておく。

【プログラミング訳】
selfはオブジェクト自身を指す

#間違った例(selfなし)
class Car:
    def __init__(brand,color):
        brand = brand #どこに保存されるのかわからない
        color = color

#正解例(selfあり)
class Car:
    def __init__ (self,brand,color):
        self.brand = brand
        self.color = color

selfがないと:

データをどこに保存すればいいか分からない
実行時にエラーになる:

Pythonは自動的に最初の引数として「そのインスタンス自身」を渡します
でも、selfがないので受け取れない。
結果として「3つの引数を渡されたけど、2つしか受け取れない!」というエラーになります

つまり、selfは:

「このオブジェクト自身」を指す
データを保存する場所を提供する
クラスの中でデータにアクセスする方法を提供する

Discussion