面向对象编程介绍
类和对象
定义类
创建对象
_init_方法
应用:创建多个对象
self
隐藏数据
面向对象编程介绍
区分面向对象和面向过程
举例:
买电脑(两种方式) 1. *网上搜资料查询 *根据自己预算和需求,定制电脑型号 *去市场找电脑实体店筛选 *业务员推荐介绍各种款式 *砍价n分钟,价格6k *下单付款,带走笔记本 *使用了一段时间,各种问题 注意:强调的是步骤、过程,每一步都是自己亲自实现 2. *找精通电脑的朋友 *交易 注意:强调的是精通电脑的朋友,不需要签字实现所有的步骤,只需要调用“精通电脑的朋友”就可以解决问题,这种解决问题的思路就是面向对象
注意:用面向对象的思维解决问题的重点就是:
1.当遇到一个需求的时候不需要自己去实现,如果是自己一步步实现的话就是面向过程
2.应该调用一个专门做这种事情的人来做
3.面向对象是基于面向过程的
面向对象(Object-oriented:简称:OO)
定义为:按人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世界分析、设计、实现软件的办法
面向对象编程(Object oriented Pogramming-OOP)是一种解决软件复用的设计和编程方法。这种方法把软件系统中相近相似的操作逻辑和操作应用数据、状态,以类的形式描述出来,以对象实例的形式在软件系统中复用,以、达到提高软件开发效率的作用。
类和对象
*面向对象编程的2个非常重要的概念:类和 对象
*对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念---类
*类就像当与制造飞机时的图纸,可以用它来进行制造的飞机就相当于对象
1.类
人以类聚,物以群分
具有相似内部状态和运动规律的实体的集合(或统称、抽象)
具有相同属性和行为事物的统称
解释:
1.类是抽象的,在使用的时候通常会找到这个类的一个具体的存在,使用这个具体的存在。
2.一个类可以找到多个对象
2.对象
1.某一个具体事物的存在,在现实世界中可以看得见摸得着的。
2.可以直接使用的
3.类和对象的关系
类就是创建对象的模版
3.类的构成
类(class)由3个部分构成
*类的名称:类名
*类的属性:一组数据
*类的方法:允许对进行操作的方法(行为)
4.类的抽象
拥有相同(或者类似)属性和行为的对象都可以抽象出一个类
方法:一般名词都是类
定义类
定义一个类,格式如下:
class 类名: 方法列表
#定义一个Car类 #定义类 class Car: #方法 def getCarInfo(self): print('铅笔个数:%d,颜色%s '%(self.wheelNum,self.color)) def move(self): print("车正在移动...")
说明:
*定义类时有2种,新式类和经典类,上面的Car是经典类,如果是Car(object)则为新式类
*类名的命名规则建议按照“大驼峰”
创建对象
如果说上面定义了Car类,就好比给车子做了设计图纸;那么创建对象就是说把图纸交给工程师去制造了。
python中,可以根据已经定义的类去创建出一个个对象
创建对象的格式为:
对象名:类名()
创建对象:
#定义类 class Car: #移动 def move(self): print('车在行驶~') #鸣笛 def too(self): print("车在鸣笛~") #创建一个对象,并用变量SDP来保存它的引用 SDP = Car() SDP.color = '白色' SDP.wheelNum = 4 #4个轮子 SDP.move SDP.tppt print(SDP.color) print(SDP.wheelNum)
总结:
*SDP = Car(),这样产生了一个Car的实例对象,此时也可以通过实例对象SDP来访问属性或者方法
*第一次使用SDP.color = ‘白色’ 表示给SDP这个对象添加属性,如果然后再次出现SDP.color = XXX 表示对属性进行修改
*SDP是一个对象,它拥有属性(数据)和方法(函数)
_init_()方法
解释:刚刚给SDP这个对象添加了2个属性(车轮数量和车的颜色),如果需要再次创建对象的话,需要进行添加属性,会比较麻烦;
是否有办法在创建对象的时候,顺便把车这恶搞对象的属性给设置了?
使用: _init_() 方法
1.使用方式
def 类名: def _init_(): pass
2.init()方法的调用
#定义车类 class Car: def _init_(self): self.wheelNum = 4 self.color = '蓝色' def move(self): print'车在行驶,目标:云南' #创建对象 SDP = Car() print('车的颜色为:%s ' %SDP.color) print('车轮数量:%d ' %SDP.wheelNum)
总结:当创建Car对象后,在没有调用 _init_()方法的前提下,SDP就默认有了2个属性whellNum和color,原因是 _init_()方法是在创建对象后,就立刻被调用了。
既然在创建完对象后_init_()方法已经被默认的执行了,那么能否让对象在默认调用_init_()方法的时候传递一些参数呢?如果可以,该怎样传递?
#定义车类 class Car: def _init_(self , newwheelNum , newcolor): self.wheelNum = newwheelNum self.color = newcolor def move(self): print'车在行驶,目标:云南' #创建对象 SDP = Car(4,‘green’) print('车的颜色是:%s' %SDP.color) print('车轮数量是 %d ' %SDP.wheelNum)
总结:
*_init_()方法,在创建一个对象时默认被调用,不需要手动调用
*_init_(self)中,默认有1个参数名字为self,如果在创建对象时传递了2个实参,那么_init_(self)中出现了self作为第一个形参外还需要2个形参,例如_init_(self,x,y)
*_init_(self)中的self参数,不需要开发者传递,python解释器会自己进行传递
应用:创建多个对象
*根据上两节创建一个Car类
*创建出多个车对象,比如SDP、GUID等
self
1.理解self
#定义一个类 class Animal: #方法: def _init_(self,name): self.name = name def printName(self): print('名字为:%s' %self.name) #定义一个函数 def myprint(animal): animal.printName() dog1 = Animal('小毛') myprint(dog1) dog2 = Animak(‘小对’) myprint(dog2)
总结:
*所谓的self,可以理解为自己,就是对象自身的意思
*某个对象调用其他方法时,python解释器就会把这个对象作为第一个参数传递给self,所以开发人员只需要传递后面的参数即可。
隐藏数据
修改对象的属性
1.直接通过对象名修改
SweetPotato.cookedLevel = 5
2.通过方法间接修改
SweetPotato.cook(5)
总结:如果一个对象与另外一个对象有一定的关系,那么一个对象可用是另外一个对象的属性。