human
I am working on the file "Python 基础课程/draft/python_basic_2/Python - 面向对象编程 01.ipynb".
The first task is:
init() 构造器方法和 del() 解构器方法
可以理解构造就是创建，解构就是销毁。每一个对象的实例都是有声明周期的，从构造到解构。
类别调用的时候，对象被创建的时候，python 先检查是否实现了 init() 方法，如果没有，则什么也不干。如果有 init()方法，则执行。
python 作为高级语言，具有垃圾对象回收机制，当 python 发现对于该实例对象的引用都被清除掉后，会执行 del() 方法。通常不需要自己去实现这个 del() 方法，python 会做好这一切。
Can you write Python code for it?

=====
Write me a the Python code you requested?
assistant
#Here is the Python code you requested.

# 先整理一下上面的代码
# v1.0.1

# 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')
        
# 战士 Soldier 类
class Soldier(NPC):
    
    # 建立 soldier 的初始化
    def __init__(self, name):
        # 调用 父类 NPC 的初始化方法
        NPC.__init__(self, name)
        
        # soldier 自己的初始化
        self.soldier_level = 1
        
    # 定义方法 - 显示 NPC 属性
    def show_properties(self):
        # 通过 super 来调用父类方法
        super(Soldier, self).show_properties()
        print('soldier_level', self.soldier_level)

# 创建两个 soldier

n1 = Soldier('AA1')
n1.show_properties()
n1.fight_common()  

print()

n2 = Soldier('AA2')
n2.show_properties()
n2.fight_common()   

# 连续创建多个 soldier 的实例
# 并存储在 list 中

s = []

for i in range(3):
    n = Soldier('AA' + str(i))
    n.show_properties()
    n.fight_common() 
    s.append(n)

# 看一下存储了对象的列表

print(s)

# 可以和一般访问列表一样访问列表中的对象

for i in s:
    print(i.name)
    
print(len(s))

# 可以删除一个实例
s.pop(1)

# 显示列表中的实例
for i in s:
    print(i.name)
    
print(len(s))

# 再增加一个巫师 Wizard 的类

# 巫师 Wizard 类
class Wizard(NPC):
    
    # 建立 Wizard 的初始化
    def __init__(self, name):
        # 调用 父类 NPC 的初始化方法
        NPC.__init__(self, name)
        
        # soldier 自己的初始化
        self.wizard_level = 1
        
    # 定义方法 - 显示 NPC 属性
    def show_properties(self):
        # 通过 super 来调用父类方法
        super(Wizard, self).show_properties()
        print('wizard_level', self.wizard_level)
    
    # 定义一个巫师专用的战斗方法
    def wizard_fight_magic(self):
        print('Wizard Magic!')
        
# 创建一个 wizard

c1 = Wizard('CC1')
c1.show_properties()
c1.fight_common()  
c1.wizard_fight_magic()

# 创建复杂的 NPC，3个 wizards，3个 soldiers

# 创建多个 soldier 的实例
s = []

for i in range(3):
    n =...