652aad4bly1g4gjxj3pr8j20u0140npe.jpg

Hi.

Welcome to my blog. This is Shinainai . I am a programmer . I live in California.I love art! I love STEM! Hope you have a nice stay!

爱存档 用唐僧经典语录解释OOP

爱存档 用唐僧经典语录解释OOP

2016年9月视频

ChatGPT的讲解:

可以设计两个类:

  • Human(人类)

  • Monster(怪物)

然后再创建实例(实例化对象)。

例如:

# Human 类
class Human:
    def __init__(self, name, hp, weapon):
        self.name = name
        self.hp = hp
        self.weapon = weapon

    def introduce(self):
        print(f"人类: {self.name}")
        print(f"HP: {self.hp}")
        print(f"武器: {self.weapon}")

    def attack(self):
        print(f"{self.name} 使用 {self.weapon} 发动攻击!")


# Monster 类
class Monster:
    def __init__(self, name, hp, skill):
        self.name = name
        self.hp = hp
        self.skill = skill

    def introduce(self):
        print(f"怪物: {self.name}")
        print(f"HP: {self.hp}")
        print(f"技能: {self.skill}")

    def roar(self):
        print(f"{self.name} 发出了可怕的咆哮!")


# 实例化 Human
hero = Human("Archer", 120, "Long Bow")

# 实例化 Monster
dragon = Monster("Fire Dragon", 500, "Fire Breath")


# 调用方法
hero.introduce()
hero.attack()

print("------")

dragon.introduce()
dragon.roar()

运行结果:

人类: Archer
HP: 120
武器: Long Bow
Archer 使用 Long Bow 发动攻击!
------
怪物: Fire Dragon
HP: 500
技能: Fire Breath
Fire Dragon 发出了可怕的咆哮!

这个结构里包含:

类(Class)

class Human:

是“模板”。

属性(Attribute)

例如:

self.hp
self.weapon

表示对象拥有的数据。

方法(Method)

例如:

attack()
roar()

表示对象的行为。

实例化(Object)

hero = Human(...)

真正创建一个角色。

游戏开发里的典型思路

很多游戏底层都类似:

Entity
 ├── Human
 ├── Monster
 ├── NPC
 └── Boss

然后:

  • 每个对象有属性

  • 有行为

  • 有状态

这就是 OOP(面向对象编程)的核心思想。

可以继续在:

  • Human

  • Monster

基础上讲“继承(Inheritance)”。

比如:

少侠 属于 人类的一种

所以:

Shaoxia 继承 Human

意思是:

少侠自动拥有 Human 的能力,再额外增加自己的能力。

继承版示例

# 父类:Human
class Human:
    def __init__(self, name, hp, weapon):
        self.name = name
        self.hp = hp
        self.weapon = weapon

    def introduce(self):
        print(f"人类: {self.name}")
        print(f"HP: {self.hp}")
        print(f"武器: {self.weapon}")

    def attack(self):
        print(f"{self.name} 使用 {self.weapon} 攻击!")


# 子类:少侠
class Shaoxia(Human):

    # 新增技能
    def qinggong(self):
        print(f"{self.name} 使用轻功飞上屋顶!")

    def justice(self):
        print(f"{self.name} 行侠仗义!")


# 实例化少侠
hero = Shaoxia("李逍遥", 150, "长剑")

# 继承自 Human
hero.introduce()
hero.attack()

print("------")

# 少侠自己的方法
hero.qinggong()
hero.justice()

输出效果

人类: 李逍遥
HP: 150
武器: 长剑
李逍遥 使用 长剑 攻击!
------
李逍遥 使用轻功飞上屋顶!
李逍遥 行侠仗义!

继承到底发生了什么?

这一句:

class Shaoxia(Human):

表示:

Shaoxia 是 Human 的子类

所以:

  • 自动继承属性

  • 自动继承方法

包括:

introduce()
attack()

都能直接用


为什么游戏特别喜欢继承?

因为:

  • 可以复用代码

  • 结构清晰

  • 方便扩展

例如:

所有 Human 都有:

hp
attack()
move()

那少侠就不用重新写一遍。

还能“重写”(Override)

比如:

普通 Human:

def attack(self):
    print("普通攻击")

少侠:

def attack(self):
    print("御剑术!")

这叫:

方法重写

也是继承的重要部分。

Python 里的 super()

如果子类想调用父类:

super().__init__(...)

例如:

class Shaoxia(Human):
    def __init__(self, name, hp, weapon, sect):
        super().__init__(name, hp, weapon)
        self.sect = sect
爱存档 Python创建海鲜列表🦞

爱存档 Python创建海鲜列表🦞