Yamu
今回はpythonの
クラスと
インスタンスに
ついて説明します
[R]※本サイトにはプロモーションが含まれています
合わせて読みたい | 内容 |
【python】pythonのclass構造を理解する | クラス内の属性とメソッドについて説明しています |
オブジェクト指向
プログラミングの設計・開発手法の一つ
変数と処理を
オブジェクトと呼ばれるもので構成する
アプローチです
クラスとは
クラスはデータ(属性)と
操作(メソッド)をまとめた
設計図のようなものです
Pythonのクラス定義
クラスを作るためのpythonの構文を紹介します
class クラス名 :
属性 = 値
def メソッド(self);
メソッドの処理
pythonではclassは
class クラス名で定義されます
インスタンス
クラスの変数に実データを入れて
処理を実体化したもの
クラスが設計図としたら
インスタンスは設計図を元に
具体的に生成されたものです
Yamu
クラスに
具体的な値が入って
インスタンス化
されていますね
クラスを作る
Userというクラスを作ります
from datetime import datetime
class User:
user_type = None
def __init__(self, name, age, birth_month):
self.name = name
self.age = age
self.birth_month = birth_month
def birth_year(self):
current_year = datetime.now().year
current_month = datetime.now().month
# 年齢と月から西暦何年生まれかを計算する
if current_month < self.birth_month:
return current_year - self.age - 1 # 誕生日がまだ来ていない場合
else:
return current_year - self.age # 誕生日が過ぎている場合
コードの説明を少しします
def __init__(self, name, age, birth_month):
self.name = name
self.age = age
self.birth_month = birth_month
__init__内で
名前、年齢、誕生日を引数として受け取り
インスタンス変数として設定しています
オブジェクト、名前、年齢、誕生日は
人によって固有の値なので
インスタンスを生成する時に初期化されます
def birth_year():は
生まれた年を計算するメソッドです
クラスをインスタンス化する
せっかくUserという
クラス(設計図)を作っても
実データを入れて実体化しないと使えません
名前と、年齢と、生まれた月を入力して
クラスを実体化(インスタンス化)してやる
必要があります
import tkinter as tk
from tkinter import simpledialog
from user_class import User
# Tkinterのウィンドウを作成
root = tk.Tk()
root.withdraw() # メインウィンドウを非表示にする
# ユーザー入力の取得
name = simpledialog.askstring("入力", "名前を入力してください:")
age = simpledialog.askinteger("入力", "年齢を入力してください:入力例 28歳→28")
birth = simpledialog.askinteger("入力", "生まれた月を入力してください: 入力例1月→1")
# 入力チェック
if not name or age is None or not (1 <= birth <= 12):
print("正しい入力をしてください。")
else:
# Userインスタンス(オブジェクト)を作成
user1 = User(name, age, birth)
# 生まれた年を計算
birth_year = user1.birth_year()
print(f"{user1.name}さんの生まれた年は {birth_year} 年です。")
# Tkinterのウィンドウを閉じる
root.destroy()
実行結果
user1 = User(name, age, birth)
でuser1インデンスを作成しています
selfとは
selfという引数は
慣例として使われている変数名です
メソッドの第一引数に宣言するselfは
インスタンス自体を表しています
参考文献
Yamu
4.1 class構文より