面向过程与面向对象
面向对象:写程序的一种思路,对象在程序中是object物体的意思,我们用这种思维方式首先应该想到的是程序由哪几部分组成,有了这些组成部分我们再考虑之后的每部分的单个部分该怎么做
面向过程:过程的意思是实现的步骤,我们按照这样的步骤编写代码使复杂的问题流程化,进而简单化,面向过程以执行者的思维去考虑每一步应该怎么做
类和对象
面向对象中想要把现实世界中的事物用代码抽象出来,我们需要创建一个事物的类,通过事物的类去产生具体的对象,将程序里面的对象与现实世界当中的事物进行对应
抽象:从众多的事物中抽出共同的、本质的特征,摈弃非本质的特征的过程
类:生活中事物的类别
对象:类的具体事物,类的某个“个体”
类是很多对象相似特证的集合,一个类中有很多对象
类的定义
声明类
class 类名:
'''类的文档字符串'''
类体
类的定义和函数相似,不同的是调用函数会执行函数体代码返回函数体执行的结果,而我们定义类时,在类的定义阶段他的代码就会运行,我们可以证明一下
class Dog:
print("汪汪汪")
输出结果:汪汪汪
则我们就证明了类的定义阶段其内部的代码就会运行,而函数则需要调用
函数和类都会产生各自的局部名称空间,将名字放进去
class Dog:
age = 2
sex = '公'
print(Dog.__dict__)
输出结果:{'__module__': '__main__', 'age': 2, 'sex': '公', '__dict__': <attribute '__dict__' of 'Dog' objects>, '__weakref__': <attribute '__weakref__' of 'Dog' objects>, '__doc__': None}
产生的这些名字会放在类的名称空间中,__dict__看到的就是名称空间
那我们到底在类里面应该写什么?写属性和方法,在类里面定义的变量我们称之为类属性,类里面定义的函数我们称之为方法
属性:事物有许多的特征,把这些特征用程序来描述则就叫做属性,比如:人的身高,性别,名字等都叫做属性,一个中可以包含多个属性
方法:事物不止有其特性,还可以做好多事,比如人可以说话,走路,吃饭等这些都可以称为方法
产生对象
调用类会产生对象,根据类创建的对象我们称之为实例化,类是一个模板,按照模板产生对象。类是一个抽象的概念,不是真实存在的,我们用类的目的是造出对象。类名加括号调用一次就是实例化一次,实例化一次就是得到一个对象
dog1 = Dog()#实例化一个dog1的对象
如何给每个对象定制一个他们独有的特征,此时我们就需要用到__init__方法
class Dog:
def __init__(self, name, age):
# 初始化name和age
self. name = name
self.age = age
dog1 = Dog("旺财",3)
print(dog1.name)
print(dog1.age)
输出结果:旺财
3
可以看出__init__()方法包含三个形参:self、name、age,在定义这个方法时,形参self必不可少,并且必须位于其他形参的前面,而__int__()方法每当根据Dog创建新的实例时,Python都会运行他,在Python调用这个方法来创建Dog实例时,将自动传入实参self。每个与实例相关联的方法调用都自动传入self,它是一个指向实例本身的一个引用,让实例能够访问到类中的属性和方法。
简单来说self就是谁调用了__init__()方法就将self传给谁比如上面程序dog1调用了形参name就把dog1指向self. name = name中的self,而他的name值就是“旺财”