面向对象编程
在学习面向对象编程之前我们一直使用面向过程进行编程,也就是说把完成一件事的所有过程都要考虑周全,举个例子,我们要做一道炒鸡蛋的菜,使用面向过程编程要考虑家里有没有鸡蛋、油,如果没有就去买,然后开火放油放鸡蛋还要考虑火的大小和鸡蛋的生熟程度等等,每一步骤都要考虑清楚,而使用面向对象编程我们只需找到一个会做炒鸡蛋的人,把事情交给他去做,我们只负责吃就可以了,不用关心他是怎么做的
类
面向对象编程要使用对象,那么对象是怎么创建的呢?,答案是由类创建的,那么什么又是类呢?
我们来列举下生活当中的类如:汽车图纸、玩具模型等,它们有一个共同特点,即通过它们可以制造出许多真实的汽车和许多真实的玩具
总而言之:类就是创建对象的模板
类由三部分组成:
1、名称:给类起的名字,定义这是一个汽车类还是一个动物类等
2、属性:一组特征数据,如汽车类的属性都有颜色、外观、速度等
3、方法:这个类都会有哪些功能,如汽车类的方法可以移动、前进、后退等
定义类:
class 类名:
属性
方法
注意:
1、class 类名:也可以写成class 类名(object):,没什么区别,第一种是经典类,第二种是新式类
2、类名通常使用大驼峰方式命名
3、方法样式几乎与前面学的函数相同,不同点为方法的形参中第一项必须写上self且不需要给self传参数
如定义一个车类:
class Car:
属性
def move(self):
print("车在移动...")
def alarm(self):
print("车在告警...")
说明:属性如何定义会在后面提到
对象
由类创建出的实体就叫做对象
创建形式为:对象名 = 类()
如:
class Car:
def move(self):
print("车在移动...")
Aodi = Car()
Aodi.move()
运行结果:
车在移动...
说明:
1、通过Aodi = Car()则创建了一辆Aodi(奥迪) 车
2、类(Car)创建出的对象(Aodi)可以使用类中的方法(move,因为定义在类中,所以这里不叫函数叫方法)
self用途与含义
下面通过车类创建多个对象(一个类可以创建无数多个同类对象),如:
class Car:
def move(self):
print("%s车在移动..."%Aodi.name)
Aodi = Car()
Aodi.name = "奥迪"
Aodi.move()
Baoma = Car()
Baoma.name = "宝马"
Baoma.move()
运行结果:
奥迪车在移动...
奥迪车在移动...
奥迪车和宝马车均可以使用类中的move方法,但是格式化输出时%号后面写谁的名字属性都达不到想要的效果,写奥迪的名字都打印奥迪车在移动,写宝马的名字都打印宝马车在移动,这里我们想要达到的效果为奥迪车调用move方法时打印奥迪车信息,宝马车调用move方法时打印宝马车信息,这是我们就使用self来解决,self含义可以理解为自身,哪一个对象调用方法self就代表哪一个对象,所以更改代码为print("%s车在移动..."%self.name),这时运行结果为:奥迪车在移动...,宝马车在移动
说明:
Aodi.name = "奥迪",意为添加Aodi对象的名字属性(属性通常不在这里创建,为了介绍self含义临时创建在这里)
__init__方法
如果类中定义了__init__方法,则表示在创建对象时系统会默认调用此方法,也叫初始化方法,如:
class Car:
def __init__(self,new_name):
self.name = new_name
def move(self):
print("%s车在移动..."%self.name)
Aodi = Car("奥迪")
Aodi.move()
Baoma = Car("宝马")
Baoma.move()
运行结果:
奥迪车在移动...
宝马车在移动...
说明:
1、类在创建对象时就已经有默认的属性(如创建一辆汽车时就已经注定这个车子是什么品牌,有几个轮子等),所以类的属性一般定义在__init__方法中
2、__init__方法在创建对象时候被调用,所以属性通过(对象 = Car(属性))传入方法中