human
I am working on the file "Python 基础课程/draft/python_basic_2/Python - 面向对象编程 01.ipynb".
The first task is:
类的方法
光是把类作为命名空间太简单了，可以给类添加功能，称为方法。
方法定义在类中，使用在实例中。可以理解为实例是真正做事情的代码，所以在实例中调用方法完成某个功能是合理的。
Can you write Python code for it?

Can you provide a the Python code you requested?
assistant
#Here is the Python code you requested.

class MyData(object):
    
    # 定义一个 SayHello 的方法，self 可以理解为必须传递的参数
    def SayHello(self):
        print('Hello!')
        
# 实例化
obj_math = MyData()

# 调用方法
obj_math.SayHello()

# 类的方法的直接调用，其实还是实例化了

MyData().SayHello()

# 在上面基础上，复杂一点的例子

class MyData(object):
    
    # 初始化方法，双下划线前后
    # 实例化的时候，需要传递 self 之后的参数
    def __init__(self, x, y):
        self.x = x
        self.y = y
    
    # 定义一个 SayHello 的方法，self 可以理解为必须传递的参数
    def SayHello(self):
        print('Hello!')
        
    def Add(self):
        print(self.x + self.y)
        
# 实例化
obj_math = MyData(3,4)

# 调用方法
obj_math.SayHello()

obj_math.x = 5

obj_math.Add()

o1 = MyData(1,3)
o1.Add()

# 再复杂一点，创建多个实例

class MyData(object):
    
    # 初始化方法，双下划线前后
    # 实例化的时候，需要传递 self 之后的参数
    def __init__(self, x, y):
        self.x = x
        self.y = y
    
    # 定义一个 SayHello 的方法，self 可以理解为必须传递的参数
    def SayHello(self):
        print('Hello!')
        
    def Add(self):
        print(self.x + self.y)
        
# 实例化
obj_math = MyData(3,4)

# 调用方法
obj_math.SayHello()
obj_math.Add()

# 再创建一个实例
obj_math2 = MyData(5,6)
obj_math2.Add()

# 我们建立一个有趣的简单的模仿游戏的类来说明面向对象编程的概念
# v1.0.0

# NPC 类
class NPC(object):
    
    # 初始化 NPC 的属性
    def __init__(self, name):
        self.name = name
        self.weapon = 'gun'
        self.blood = 1000
        
    # 定义方法 - 显示 NPC 属性
    def show_properties(self):
        print('name:', self.name)
        print('weapon:', self.weapon)
        print('blood:', self.blood)
    
    # 定义方法 - 通用攻击
    def fight_common(self):
        print('Fight Common')
    
n1 = NPC('AA1')
n1.show_properties()
n1.fight_common()