Python的核心知识——面向对象目录
一、WHY 学习面向对象?
假设现在有一个场景是这样的,我们要编写一个游戏,里面有主角,NPC,怪物等等这些模型,那么如果我们不学面向对象的话,我们就需要一个一个的编写它们的属性及动作,一般情况下,一个大型的游戏比如LOL(这游戏是真的火,都好几年了还没被干掉)里面的英雄,小兵,大龙,有好上百个模型吧。我们不可能一个一个的写,那代码量就不是一两个g那么大了(其实这就是面向过程的思想,POP)!仔细观察会发现它们这些模型都有相同的属性和动作,比如:都有生命值,魔法值等属性,攻击等动作,所以编程语言开发者们就在想了,有没有一个东西把它们共同的属性、动作封装起来,这时候类概念应运而生了,就是我们这篇文章的主体对象,而这种思想就是面向对象(OOP)!
那什么是面向对象编程呢?
度娘一下:面向对象(Object Oriented)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。
巴拉巴拉一堆,感觉懵懵懂懂,个人的理解就是,一种思想,相对于面向过程的一种思想。这是我个人对关于面向对象与面向过程的区别的理解:链接在此
二、类和对象
类和对象是面向对象编程里面的两个非常重要的概念。它们的关系嘛,嗯~,如果是说类是一张汽车的图纸,那么一辆根据这个图纸制造出来的汽车就是一个对象!
1.类
类啥是类?用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。就可以理解为之前我们学习的函数,是一种有自治系统的函数,有自己的属性方法等等。类也是虚的,和函数一样,只有当它被实例化时才是计算机要运行的代码块,一个稿纸。
2.对象
对象又是啥?女朋友?男朋友?nonono,编程中的对象可不男女朋友万能多了,它可以帮你制造一个男朋友或者女朋友,厉害吧!那啥是对象?对象就是类的实例化,上面说了类是虚的,纸上谈兵,而对象是实,招兵买马。和函数一样,函数是虚的,调用函数是实的。
三、定义类和创建对象
那问题来了,知道它们的重要性,就得学会用它们了吧!那怎么用?听我慢慢道来!
首先这里推荐一个适合工作用的Python编程工具(看个人吧!想用就用,毕竟好东西要一起分享嘛!):pycharm
注意:像这种官方工具,尽量使用专业版,首先同为在IT行业的我们应该尊重编写pycharm的团队成果,其次在使用社区版的软件是不全面,这时候我们就会想用盗版破解软件,如果使用盗版软件,在以后的工作中就会涉及到版权的法律问题,那就不是一两百可以解决的问题了。
1.类的定义
格式:
class 类的名字:
…类的属性 = 属性值
…类的方法(self, [参数]):
… …方法体
类的属性,在Python中类的属性的定义与变量定义一样,记得赋值
类的方法,在Python中类的方法的定义与普通的函数定义方法一样,记得加self变量
代码
class Str:
#一般Python属性的定义是直接赋值的,不像C++等编程语言是不可以赋值的
name = "cc"
age = 18
#类的方法定义在参数表里,必须加上一个变量,一般情况Python编程者普遍使用self为变量名
#self就是相对于C++的this指针,由于类是模型,而对象是由类实例化产生的,所以为了区分不同的对象,我们通过引进self变量区别
#self变量的意思是将实例化后的对象的名字传递给self,而这种传递是在类里面的,调用方法时不需要传递
#说白了,self就是一种标记实例化对象的全局变量,而方法里面的变量是局部变量
#__init__魔法方法就是对类的初始化,在定义时本身就有的,现在是把它进行覆盖(后面会写),是不需要在实例化时调用的
#通常称__init__为构造方法
#其实类里面还有很多类似的方法,自行探索
#self.name是对类内部属性的访问或者复制
def __init__(self, Name):
self.name = Name
def S_print(self):
print("Name is {}, Age is {}".format(self.name, self.age))
类定义是虚的,不会在程序中显示!
2.对象的创建
格式:
实例化对象名 = 类名([参数])
实例化对象名.类属性名
实例化对象名.类方法名
代码
class Str:
name = "cc"
age = 18
def __init__(