1 面向对象
- 编程语言有面向对象和面向过程之分,以去两个学生去学校为例
- 面向过程步骤为:
- 学生1背上书包
- 学生1坐上校车
- 学生1到达学校
- 学生2背上书包
- 学生2坐上校车
- 学生2到达学校
- 面向对象步骤为:
- 学生1去学校
- 学生2去学校
- 面向过程步骤为:
- 在上述例子中,关注的是对象,而不是过程,背上书包、出门、坐校车、到达学校等动作、属性等都保存在对象中
- 对于面向对象编程,一切皆对象,要使用某种功能,直接找到相应的对象就可以了
- 面向对象使得代码复用性较高,且方便阅读,较容易维护,但对象是对现实生活中事物的抽象,不太符合常规思维,编写相对麻烦
2 类
参考资料:python 面向对象 来源:菜鸟教程
- 类的定义: 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性(即数据)和方法(即行为)
- 类创建语法
class 类名([父类]):
类属性
类方法
- 对象: 通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。对象是类的实例(如果多个对象是一个类创建的,那么我们称之为一类对象)
- 类调用方法: 必须通过对象调用
对象.方法名()
- 对象方法调用与函数调用的区别:
- 函数调用:函数中有几个形参就需要传递几个实参
- 方法调用:会默认传递一个参数
- 类属性和方法
- 类属性:即一些变量,这些变量是该类实例(即对象)的公共属性,所有该类实例都可以通过 对象.属性名 形式访问
- 类方法:即一些函数,这些函数是该类实例的公共方法,所有该类实例都可以通过 对象.方法名() 的形式访问,方法调用时会默认传递一个参数,因此方法中至少有一个形参(self)
- 属性和方法的查找流程: 调用一个对象属性时,解析器先在当前对象在寻找该属性,若有,则返回当前对象的属性值,若没有,则去该对象的类中寻找,有则返回类对象属性值,没有则报错;查找方法同理
- 类对象和实例对象中都可以保存属性和方法:
- 若此属性或方法是以实例共享的,则应该将其保存到类对象中
- 若此属性或方法是某个实例对象独有的。则应该将其保存到实例对象中
- 一般情况下,属性保存到实例对象中,而方法需要保存到类对象中
3 参数 self
- self 在定义时需要定义,但在调用时会自动传入
- self 的名字并不是规定死的,但最好还是按照约定用self
- self 总是指调用时的类的实例
#示例
class stu():
name='Nome'
bag='Nome'
bus='Nome'
def ba(self):
print('%s背上%s了'%(self.name,self.bag))
def bu(self):
print('%s 坐上%s了'%(self.name,self.bus))
def res(self):
self.ba()
self.bu()
print('%s到学校了'%(self.name))
stu1=stu()
stu1.res() #属性未赋值,输出默认值
print('-----------------')
stu1.name ='stu1'
stu1.bag ='bag1'
stu1.bus ='bus1'
stu1.bu() #调用其中一个方法
print('-----------------')
stu1.res() #属性赋值
'''
运行结果:
Nome背上Nome了
Nome 坐上Nome了
Nome到学校了
-----------------
stu1 坐上bus1了
-----------------
stu1背上bag1了
stu1 坐上bus1了
stu1到学校了
'''