到目前为止,我们看到的都是基于 Python 解释器的例子。Python 解释器能够以对话模式执行程序,非常便于进行简单的实验。但是,想进行一连串的处理时,因为每次都需要输入程序,所以不太方便。这时,可以将 Python 程序保存为文件,然后(集中地)运行这个文件。下面,我们来看一个 Python 脚本文件的例子。

打开文本编辑器,新建一个 hungry.py 的文件。hungry.py 只包含下面一行语句。

print("I'm hungry!")

接着,打开终端(Windows 中的命令行窗口),移至 hungry.py 所在的位置。然后,将 hungry.py 文件名作为参数,运行 python 命令。这里假设 hungry.py~/deep-learning-from-scratch/ch01 目录下(在本书提供的源代码中,hungry.py 文件位于 ch01 目录下)。

$ cd ~/deep-learning-from-scratch/ch01 # 移动目录
$ python hungry.py
I'm hungry!

这样,使用 python hungry.py 命令就可以执行这个 Python 程序了。

前面我们了解了 intstr 等数据类型(通过 type() 函数可以查看对象的类型)。这些数据类型是“内置”的数据类型,是 Python 中一开始就有的数据类型。现在,我们来定义新的类。如果用户自己定义类的话,就可以自己创建数据类型。此外,也可以定义原创的方法(类的函数)和属性。

Python 中使用 class 关键字来定义类,类要遵循下述格式(模板)。

class 类名:
    def __init__(self, 参数, …): # 构造函数
       ...
    def 方法名1(self, 参数, …):  # 方法1
       ...
    def 方法名2(self, 参数, …):  # 方法2
       ...

这里有一个特殊的 init 方法,这是进行初始化的方法,也称为构造函数(constructor),只在生成类的实例时被调用一次。此外,在方法的第一个参数中明确地写入表示自身(自身的实例)的 self 是 Python 的一个特点(学过其他编程语言的人可能会觉得这种写 self 的方式有一点奇怪)。

下面我们通过一个简单的例子来创建一个类。这里将下面的程序保存为 man.py

class Man:
    def __init__(self, name):
        self.name = name
        print("Initialized!")
    def hello(self):
        print("Hello " + self.name + "!")
    def goodbye(self):
        print("Good-bye " + self.name + "!")
    m = Man("David")
    m.hello()
    m.goodbye()

从终端运行 man.py

$ python man.py
Initialized!
Hello David!
Good-bye David!

这里我们定义了一个新类 Man。上面的例子中,类 Man 生成了实例(对象)m

Man 的构造函数(初始化方法)会接收参数 name,然后用这个参数初始化实例变量 self.name实例变量是存储在各个实例中的变量。Python 中可以像 self.name 这样,通过在 self 后面添加属性名来生成或访问实例变量。