两种编程思维
Posted m0_73505947
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两种编程思维相关的知识,希望对你有一定的参考价值。
面向过程编程,看重的是解决问题的过程。
就像在做项目2的时候,我们把一个PK游戏分解成了5个过程:
这种分析出解决问题所需要的步骤,然后按照这些步骤解决问题的方法,就是【面向过程】编程
【面向对象】
比如我们现在接到的一个需求是:做一道西红柿炒鸡蛋。
第一种方法是:自己按照炒菜的步骤亲手制作一道西红柿炒鸡蛋。
第二种方法是:制作一台炒菜机器人,然后告诉机器人做一道西红柿炒鸡蛋。
在这里,我们直接面对的是机器人,而非炒菜的过程,所以这里机器人就是我们面对的对象,这种解决问题的方法就叫做【面向对象】编程。
【面向过程】编程主要用到的是“函数”知识,将每个过程步骤打包成函数,再依次调用,还记得我们项目二用到的几个函数吗?
而【面向对象】编程主要用到的是“类和对象”知识。
一言以蔽之,【类】是【对象】的母板,得先有了类,我们才能制造各种“对象”。就像我们先有了产品图纸,才能制造各种产品一样。
所以,这一关我们先聚焦学习【类】,然后在下一关学习【类与对象】。
类是一个函数包
理解【类】最简单的方式:【类】是一个函数包。类中可以放置函数和变量,然后类中的函数可以很方便的使用类中的变量。
类中可以放置函数和变量
class 类A():
def 函数1():
print('报道!我是类A的第一个方法!')
def 函数2():
print('报道!我是类A的第二个方法!')
def 函数3():
print('报道!我是类A的第三个方法!')
类A.函数1()
类A.函数2()
类A.函数3()
class 类A():
变量1 = 100
变量2 = -5.83
变量3 = 'abc'
# 这里需要用print语句,才能把提取出的数值打印到屏幕上
print(类A.变量1)
print(类A.变量2)
print(类A.变量3)
不过类中的属性(变量)也不是不能改变,使用类名.变量名的格式,可以让我们在类的外面,增加或修改类的属性:
类A.变量1 = 99
类A.变量4 = '新增一个变量'
print(类A.变量1)
print(类A.变量4)
我们为了让代码更直观,一般会把类中的函数和函数之间换行隔开,这不影响代码运行。
看到这里,你可能会有有点疑惑,类方法也是函数,那和我们之前学的单独定义函数有什么区别吗?
它们两者最大的区别,一个是它的调用格式:类.函数名()比函数名()多了一个【类.】,但更重要的是,“类”中的函数可以利用“类”中的变量(也就是类方法可以调用类属性)
@classmethod是声明了下面的函数是类方法,为什么要这么写呢?这就是我们接下来要讲的:
类方法和类属性可以组合
class 类A():
变量1 = 100
变量2 = 200
@classmethod
def 函数1(cls):
print(cls.变量1)
print(cls.变量2)
类A.函数1()
在这里,为了把类中的变量传递给类中的函数,我们需要用到3个特定格式:
① 第一个格式@classmethod的中文意思就是“类方法”,@classmethod声明了函数1是类方法,这样才能允许函数1使用类属性中的数据。
② 第二个格式cls的意思是class的缩写。如果类方法函数1想使用类属性(也就是类中的变量),就要写上cls为函数1的第一个参数,也就是把这个类作为参数传给自己,这样就能被允许使用类中的数据。
③ 第三个格式是cls.变量。类方法想使用类属性的时候,需要在这些变量名称前加上cls.。
这就好比类方法和类之间的约法三章,所以但凡有任何格式错误都会报错。
如果缺①,即缺了“@classmethod”,类方法就不能直接利用类中的属性,于是报错。(请运行代码,报错后,修改格式到正确的样式就能运行通过)
另外,当类中的函数【不需要】用到类中的变量时,就不要用@classmethod、cls、cls.三处格式,否则就是占着茅坑不拉屎,终端也会给你报错。(没错,就是这么傲娇~)
给类方法传参
类方法仅使用外部参数
一首诗 = ['《卜算子》','我住长江头,','君住长江尾。','日日思君不见君,','共饮长江水。']
def 念诗函数(参数):
for i in 参数:
print(i)
念诗函数(一首诗)
类方法仅使用内部参数
class 念诗类():
一首诗 = ['《卜算子》','我住长江头,','君住长江尾。','日日思君不见君,','共饮长江水。']
@classmethod
def 念诗函数(cls):
for i in cls.一首诗:
print(i)
念诗类.念诗函数()
类方法同时使用内部参数和外部参数
# 请直接运行并体验代码效果
class 加100类():
变量 = 100
@classmethod
def 加100函数(cls,参数1,参数2,参数3):
总和 = cls.变量 + 参数1 + 参数2 + 参数3
print('加100函数计算结果如下:')
print(总和)
参数1 = int(input('请输入一个整数:'))
参数2 = int(input('请输入一个整数:'))
参数3 = int(input('请输入一个整数:'))
加100类.加100函数(参数1,参数2,参数3)
增加/修改类属性
有两种途径来增加或修改类属性。一种是从内部,用类方法去增加/修改;另一种是从外部,用类.变量 = xx直接增加/修改类属性。
从外部增加/修改属性
class 类A():
pass
类A.变量1 = 100
print(类A.变量1)
类A()是一个空类(里面的pass语句代表“什么都不做”),利用类A.变量1,我们在外部给类A()添加了一个类属性变量1,然后使用print语句把类属性打印了出来。
类A.变量1 = 100
print(类A.变量1)
变量1 = 15
#这是类外部的变量1
变量2 = 'abc'
class 类A():
变量1 = 100
#这是类属性变量1
变量1 = 类A.变量1
类A.变量2 = 变量2
print(类A.变量1)
print(类A.变量2)
class 类():
@classmethod
def 打印类属性(cls):
print(cls.变量)
类.变量 = input('请输入字符串:')
类.打印类属性()
先利用input函数从外部接收了一个字符串,并通过赋值的方式保存为了类属性类.变量。然后利用类方法类.打印类属性()打印出了这个外部输入的字符串。
class 幸运():
@classmethod
def 好运翻倍(cls):
print('好的,我把它存了起来,然后翻了888倍还给你:' + str(cls.幸运数*888))
# 或者这样写也可以:
# print('好的,我把它存了起来,然后翻了888倍还给你:%d' % (cls.幸运数*888))
幸运.幸运数 = int(input('你的幸运数是多少?请输入一个整数。'))
幸运.好运翻倍()
从内部增加/修改属性
class 类():
@classmethod
def 增加类属性(cls):
cls.变量 = input('请随意输入字符串:')
类.增加类属性()
print('打印新增的类属性:')
print(类.变量)
终端(输入完毕后请按回车键)
class 念诗类():
一首诗 = ['《卜算子》','我住长江头,','君住长江尾。','日日思君不见君,','共饮长江水。']
@classmethod
def 念诗函数(cls,参数):
print('念给'+ 参数 +'的诗:')
for i in cls.一首诗:
print(i)
念诗类.念诗函数('张三')
class 念诗类():
一首诗 = ['《卜算子》','我住长江头,','君住长江尾。','日日思君不见君,','共饮长江水。']
@classmethod
def 念诗函数(cls):
cls.接收人 = input('请输入你想给谁念诗:')
print('念给'+ cls.接收人 +'的诗:')
for i in cls.一首诗:
print(i)
念诗类.念诗函数()
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.学生姓名 + '的评级是:差')
[python]两种编程思维--面向过程和面向对象
例如:eg:炒一份西红柿鸡蛋
一、面向过程
面向过程的编程思维,如下
二、面向对象
制作一台炒菜机器人,然后告诉机器人做一道西红柿炒鸡蛋。在这里,我们直接面对的是机器人,而非炒菜的过程,所以这里机器人就是我们面对的对象,这种解决问题的方法就叫做【面向对象】编程
三、总结
【面向过程】编程主要用到的是“函数”知识,将每个过程步骤打包成函数,再依次调用,看重的是解决问题的过程
【面向对象】编程主要用到的是“类和对象”知识,看重的是解决问题的方法
以上是关于两种编程思维的主要内容,如果未能解决你的问题,请参考以下文章