mirror of
https://github.com/apachecn/ailearning.git
synced 2026-02-10 05:45:40 +08:00
160 lines
2.4 KiB
Markdown
160 lines
2.4 KiB
Markdown
# 定义 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)
|
||
<ipython-input-8-42e6a9d57a8b> in <module>()
|
||
----> 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.
|
||
|
||
``` |