技術書典16でChatGPT本を出します!(ここをクリック)

【Python】夢女がクラスの概念を学んだ

※この記事はネタ記事です

深夜のDiscordで盛り上がったネタが、地味にクラスの概念を学ぶのに役立ったので、ここに残しておきます。

ちなみに私は夢女ではありません。夢女は私の友人です。

目次

とりあえず書いてみる

Step1.AくんとBくんに告白して返事をもらう

class Akun:
    def express_love(self):
        print("好き")

class Bkun:
    def express_love(self):
        print("あー、はいはい")

class Girl:
    def __init__(self, boyfriend):
        self.boyfriend = boyfriend

    def beg_love(self, times):
        for  in range(times):
            self.boyfriend.express_love()

girl = Girl(Akun())
girl.beg_love(10)
girl = Girl(Bkun())
girl.beg_love(10)

オブジェクトA君とB君と少女を作成、少女が男性2名に10回告白。(重いのか軽いのか)

オブジェクト少女を定義するときに対象の男性も指定し、そのあとに10回告白する流れです。

Step2.好感度を付ける

class Akun:
    def express_love(self):
        self.love_level = 10
        if self.love_level == 10:
            print("好きだぜ")
        elif 5 <= self.love_level <= 9:
            print("ちょっとはな")
            self.love_level += 1
        elif 2 <= self.love_level <= 4:
            print("何言ってんだこいつ")
            self.love_level += 1
        else:
            print("はぁ?")
            self.love_level += 1


class Bkun:
    def express_love(self):
        self.love_level = 10
        if self.love_level == 10:
            print("あーはいはい")
        elif 5 <= self.love_level <= 9:
            print("そうだね、よかったね")
            self.love_level += 1
        elif 2 <= self.love_level <= 4:
            print("めんどくせぇ")
            self.love_level += 1
        else:
            print("話しかけんな")
            self.love_level += 1


class Girl:
    def __init__(self, boyfriend):
        self.boyfriend = boyfriend

    def beg_love(self, times):
        for _ in range(times):
            self.boyfriend.express_love()


girl = Girl(Akun())
girl.beg_love(10)
girl = Girl(Bkun())
girl.beg_love(10)

AくんとBくんのexpress_love関数に分岐で好感度(love_level)を付けました。

ちなみにこれ、全部好感度がプラスされる実装なので10以下の好感度は見ることはできない罠(笑)

友人曰く「単純接触効果」らしいのですが、リアルでこんなことしたら嫌われるから注意しましょう。

Step3.継承(オーバーライド)を使う

class BoyFriend:
    def __init__(self):
        self.love_level = 0

    def express_love(self):
        raise NotImplementedError


class Girl:
    def __init__(self, boyfriend):
        self.boyfriend = boyfriend

    def beg_love(self, times):
        for _ in range(times):
            self.boyfriend.express_love()


class Akun(BoyFriend):
    def __init__(self):
        self.love_level = 10

    def express_love(self):
        if self.love_level == 10:
            print("好きだぜ")
        elif 5 <= self.love_level <= 9:
            print("ちょっとはな")
            self.love_level += 1
        elif 2 <= self.love_level <= 4:
            print("何言ってんだこいつ")
            self.love_level += 1
        else:
            print("はぁ?")
            self.love_level += 1


class Bkun(BoyFriend):
    def __init__(self):
        self.love_level = 1

    def express_love(self):
        if self.love_level == 10:
            print("あーはいはい")
        elif 5 <= self.love_level <= 9:
            print("そうだね、よかったね")
            self.love_level += 1
        elif 2 <= self.love_level <= 4:
            print("めんどくせぇ")
            self.love_level += 1
        else:
            print("話しかけんな")
            self.love_level += 1


girl = Girl(Akun())
girl.beg_love(10)
girl = Girl(Bkun())
girl.beg_love(10)

クラス「BoyFriend」を作り、好感度の概念とエラー処理を施します。

BoyFriendの時点では好感度(love_level)0で作成(リセット)ですが、AくんBくんを作成するときに好感度と「express_love」関数を上書き処理をしています。

Aくんは10のままですが、Bくんは1からだんだん好感度が上がってセリフが変わる仕様です。

牧場物語とかギャルゲーでよくあるやつですね。ツンデレですか?

最後に

……ふぅ。

なんでこんなプログラムを書いたのか。私含めてみんなわからない。

正直「ブログに書く」って言ったこと、若干後悔してます。

まあ、勉強になったからええか……。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次