AI初学笔记4 类与面向对象的创建
一、什么是类,什么是面向对象
在前几节建立的深度学习模型都是简单模型,定义的函数只有两三个,所以不需要定义大类,但当模型复杂以后,需要使用的函数极多,这就需要对所需函数进行分类。
一般的定义规则是大类中再包含该类的属性和动作。打个简单的比方,我们大致可以把动物分为人类,鸟类,鱼类等等大类(生物学上好像不是这么分的不过就当是这样吧),人类中的属性有:性别,年龄,名字等,人类中的动作有:吃,跑等。
在python中编程有两种思路,一种是面向过程,一种是面向对象,面向过程是针对任务,需要什么函数就自己定义什么函数,就像之前几节里的那样。而面向对象编程则是在之后要经常用到的,应对复杂模型必须掌握的编程思路,就是将函数提前定义进大类里,需要的时候将类名赋给对象名,直接从大类中调用所需函数。
再打个简单的比方,一个老板如果要出差,你当然可以自己定机票,定酒店,打出租去机场,再坐飞机,这就是面向过程的编程思路,其中订机票等等动作就是一个个函数。当然还有更简单的方式,因为你是老板,所以完全可以通知秘书,他会准备好一切安排,你需要做的就是:通知秘书,坐飞机。这就是面向对象的编程思路,过程中所需要的函数,都会在大类中定义好,直接取用就可以了。
代码实现
代码如下:
class Person:
age = 18
name = 'XiaoMing'
def eat(slef):
print("吃饭")
pass
def run(self):
print("跑")
xiao = Person
print(xiao.age)
xiao.eat(xiao)
xiao.run(xiao)
print("姓名:{},年龄:{}".format(xiao.name, xiao.age))
输出结果为:
18
吃饭
跑
姓名:XiaoMing,年龄:18
这里调用函数的时候 xiao.eat(xiao) 括号中要输入本身self,否则报错(视频课程中没有报错,不知为何,可能是python版本不同)。另外注意一下.format()的用法。
二、实例属性
通过使用__init__():函数可以实现实例属性定义,与类属性的区别在于,要想使用实例属性,那么必须先启动 init(): 函数,而不能直接取用,这里将原先的类属性name去掉,重新定义了实例属性的name,运行结果与上文相同。
代码实现
代码如下:
class Person(object):
age = 18
def eat(abc):
print("吃饭")
pass
def run(self):
print("跑")
def __init__(self):
self.</