从面向过程到面向对象的编程
- 面向过程编程:
看中的是解决问题的过程,首先分析出解决问题的步骤,然后按照分析出来的步骤进行解决问题,这就是面向过程编程。面向过程编程主要使用到函数知识,将每个步骤的过程封装在一个函数里再依次调用。
- 面向对象编程:
主要会使用到“类与对象”方面的知识:得先有类才会有对象,类是对象的母版
一、认识类
1.【类】是一个函数包。类中可以放置函数和变量,然后类中的函数可以很方便的使用类中的变量。
2.就像函数用 " def() " 定义,则类用 " class() " 来定义。
3.在类中我们将定义的函数称作类的 “方法” ,通常用“类名.函数名”的格式来让类中的方法运行起来。
4.在类中我们定义的变量叫做类的 “属性” ,通常用“类名.变量名”的格式将类中的属性值提取出来。
5.不过类中的属性(变量)也不是不能改变,使用类名.变量名的格式,可以让我们在类的外面,增加或修改类的属性:
5.类方法不仅可以调用类属性,还可以直接调用其它类方法(如下所示:)
class 成绩单():
@classmethod
def 录入成绩单(cls):
cls.学生姓名 = input('请输入学生姓名:')
cls.语文_成绩 = int(input('请输入语文成绩:'))
cls.数学_成绩 = int(input('请输入数学成绩:'))
@classmethod
def 计算平均分(cls):
平均分 = (cls.语文_成绩 + cls.数学_成绩)/2
return 平均分
@classmethod
def 评级(cls):
平均分 = cls.计算平均分()
if 平均分>=90:
print(cls.学生姓名 + '的评级是:优')
elif 平均分>= 80 and 平均分<90 :
print(cls.学生姓名 + '的评级是:良')
elif 平均分>= 60 and 平均分<80 :
print(cls.学生姓名 + '的评级是:中')
else:
print(cls.学生姓名 + '的评级是:差')
成绩单.录入成绩单()
成绩单.评级()
class aaa():
b1=100
b2=200
@classmethod #①
def 函数1(cls): #②
print(cls.b1) #③
print(cls.b2)
① 第一个格式@classmethod的中文意思就是“类方法”,@classmethod声明了函数1是类方法,这样才能允许函数1使用类属性中的数据。类中的方法在需要调用类中的属性时才需要使用@classmethod
② 第二个格式cls的意思是class的缩写。如果类方法函数1想使用类属性(也就是类中的变量),就要写上cls为函数1的第一个参数,也就是把这个类作为参数传给自己,这样就能被允许使用类中的数据。
③ 第三个格式是cls.变量。类方法想使用类属性的时候,需要在这些变量名称前加上cls.。
二、给类方法传参
1.类方法仅使用外部参数
一首诗 = ['《卜算子》','我住长江头,','君住长江尾。','日日思君不见君,','共饮长江水。']
class 念诗类():
def 念诗函数(参数):
for i in 参数:
print(i)
念诗类.念诗函数(一首诗)
2.类方法仅使用内部参数
class 念诗类():
一首诗 = ['《卜算子》','我住长江头,','君住长江尾。','日日思君不见君,','共饮长江水。']
@classmethod
def 念诗函数(cls):
for i in cls.一首诗:
print(i)
念诗类.念诗函数()
3.类同时使用内部参数和外部参数
class 加100类():
变量 = 100
@classmethod
def 加100函数(cls,参数):
总和 = cls.变量 + 参数
print('加100函数计算结果如下:')
print(总和)
参数 = int(input('请输入一个整数:'))
加100类.加100函数(参数)
三、增加\修改类的属性
1.从外部增加\修改类属性
class 类():
@classmethod
def 打印类属性(cls):
print(cls.变量)
类.变量 = input('请输入字符串:') #输入asd
类.打印类属性() #输出asd
2.从内部增加\修改类属性
class 类():
@classmethod
def 增加类属性(cls):
cls.变量 = input('请随意输入字符串:')
类.增加类属性()
print('打印新增的类属性:') #ghk
print(类.变量) #ghk
class 念诗类():
一首诗 = ['《卜算子》','我住长江头,','君住长江尾。','日日思君不见君,','共饮长江水。']
@classmethod
def 念诗函数(cls):
cls.接收人 = input('请输入你想给谁念诗:')
print('念给'+ cls.接收人 +'的诗:')
for i in cls.一首诗:
print(i)
念诗类.念诗函数()
类的方法直接调用其他方法举例:
①是调用类方法评级,②是在评级内部调用了类方法计算平均分,③④是类方法计算平均分的过程,最后返回的值重新赋值给了评级中的类属性平均分。
这里有个小点要注意,def 评级(cls)中的平均分和def 计算平均分(cls)的平均分,是两个不同的变量,因为它们在不同的函数下工作,作用域不同。
四、类的实例化
1.实例化:从类变成实例对象(类---->(实例化)----->实例对象)
2.“cls代表“类”的意思,self代表“实例”的意思,这样写是编码规范(程序员们的共识),但不是强制要求。”
3."当类支持实例化的时候,self是所有类方法位于首位、默认的特殊参数"
4.”类和实例的关系,就像母体和复制品的关系一样。当一个类实例化为多个实例后,实例将原封不动的获得类属性,也就是实例属性和类属性完全相等。“
5.“重写类方法”分成两个步骤:第一个步骤是在类的外部写一个函数,第二个步骤是把这个新函数的名字赋值给类.原始函数
6."我们可以通过重写类方法,让实例方法发生变化,但我们不能重写实例方法"
class 幸运():
def 好运翻倍(self):
print('好的,我把它存了起来,然后翻了888倍还给你:' + str(self.幸运数*888))
def 新函数(self):
print('我是重写后的新函数!')
print('好的,我把它存了起来,然后翻了666倍还给你:' + str(self.幸运数*666))
幸运.幸运数 = int(input('你的幸运数是多少?请输入一个整数。'))
幸运.好运翻倍= 新函数
实例 = 幸运() # 实例化
实例.好运翻倍()
7.实例和属性的方法
①修改类的属性和方法,会影响所有实例的属性和方法
②修改某个实例的属性,只会影响这个实例本身
③不能修改实例的方法