# 定义 class ## 基本形式 `class` 定义如下: ```py class ClassName(ParentClass): """class docstring""" def method(self): return ``` * `class` 关键词在最前面 * `ClassName` 通常采用 `CamelCase` 记法 * 括号中的 `ParentClass` 用来表示继承关系 * 冒号不能缺少 * `""""""` 中的内容表示 `docstring`,可以省略 * 方法定义与函数定义十分类似,不过多了一个 `self` 参数表示这个对象本身 * `class` 中的方法要进行缩进 In [1]: ```py class Forest(object): """ Forest can grow trees which eventually die.""" pass ``` 其中 `object` 是最基本的类型。 查看帮助: In [2]: ```py import numpy as np np.info(Forest) ``` ```py Forest() Forest can grow trees which eventually die. Methods: ``` In [3]: ```py forest = Forest() ``` In [4]: ```py forest ``` Out[4]: ```py <__main__.Forest at 0x3cda358> ``` ## 添加方法和属性 可以直接添加属性(有更好的替代方式): In [5]: ```py forest.trees = np.zeros((150, 150), dtype=bool) ``` In [6]: ```py forest.trees ``` Out[6]: ```py array([[False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False], ..., [False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False]], dtype=bool) ``` In [7]: ```py forest2 = Forest() ``` `forest2` 没有这个属性: In [8]: ```py forest2.trees ``` ```py --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) in () ----> 1 forest2.trees AttributeError: 'Forest' object has no attribute 'trees' ``` 添加方法时,默认第一个参数是对象本身,一般为 `self`,可能用到也可能用不到,然后才是其他的参数: In [9]: ```py class Forest(object): """ Forest can grow trees which eventually die.""" def grow(self): print "the tree is growing!" def number(self, num=1): if num == 1: print 'there is 1 tree.' else: print 'there are', num, 'trees.' ``` In [10]: ```py forest = Forest() forest.grow() forest.number(12) ``` ```py the tree is growing! there are 12 trees. ```