面向对象编程介绍
面向对象(object-oriented;简称:oo):根据业务逻辑从上到下写代码,按人们认识客观世界的系统思维方式,采取基于对象(实体)的概念建立模型,模型客观世界分析、设计、实现软件的办法
面向对象编程(Object oriented programming-OOP):将数据与函数绑定到一起,进行封装,这样能够快速的开发程序,减少了重复代码的重写过程。是一种解决软件复用的设计和编程方法。这种方法把软件系统中相似的操作逻辑和操作应用数据、状态,以类的形式描述出来,以对象实例的形式在软件系统中复用,以达到提高软件开发效率的作用。
1.类的构成
类(class)由3个部分构成
类的名称:类名
类的属性:一组数据
类的方法:允许对进行操作的方法(行为)
2.创建对象
总结:
BMW=Car(),这样就产生了一个Car的实例对象,此时也可以通过实例对象BMW来访问属性或者方法
第一次使用BMW.color=“黑色”表示给BMW这个对象添加属性,如果后面再次出现BMW.color=XXX表示对属性进行修改
BMW是一个对象,它拥有属性(数据)和方法(函数)
当创建一个对象时,就是用一个模子,来制造一个实物
3、init()方法
(1)使用方法
def 类名:
#初始化函数,用来完成一些默认的设定
def init():
pass
(2)init()方法的调用
#定义汽车类
class Car:
def __init__(self, newWheelNum, newColor):
self.wheelNum = newWheelNum
self.color = newColor
print('车在跑,目标:夏威夷')
#创建对象
BMW = Car(4, 'green')
print('车的颜色为:%s' def move(self):
%BMW.color)
print('车轮子数量为:%d'%BMW.wheelNum)
结果:
车的颜色为:green 车轮子数量为:4
总结:
__init__()方法,在创建一个对象时默认被调用,不需要手动调用
__init__(self)中,默认有1个参数名字为self,如果在创建对象时传递了2个实参,那么__init__(self)中出了self作为第一个形参外,还需要2个形参,例如__init__(self,x,y)
__init__(self)中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递进去。
4、定义__str__()方法
在Python中方法名如果是__xxx__()的,那么就有特殊的功能,因此叫做“魔法”方法。
当使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印从在这个方法中return的数据。
应用:烤地瓜
class Sweetpotato:
def __init__(self):
self.cookedLevel=0
self.cookedString="生的"
self.condiments =[]
def __str__(self):
return "地瓜 状态为%s(%d),地瓜的调味品:%s"%(self.cookedString,self.cookedLevel,str(self.condiments))
def cook(self,cooked_tiom):
self.cookedLevel+=cooked_tiom
if self.cookedLevel>=0 and self.cookedLevel<3:
self.cookedString="生的"
elif self.cookedLevel>=3 and self.cookedLevel<5:
self.cookedString="半生不熟"
elif self.cookedLevel>=5 and self.cookedLevel<8:
self.cookedString="熟了"
elif self.cookedLevel>=8 :
self.cookedString="烧焦了"
def addCondiments(self,item):
self.condiments.append(item)
di_gua=Sweetpotato()
di_gua.cook(1)
di_gua.addCondiments("辣椒")
print(di_gua)
di_gua.cook(2)
di_gua.addCondiments("孜然")
print(di_gua)
结果: 地瓜 状态为生的(1),地瓜的调味品:[‘辣椒’] 地瓜 状态为半生不熟(3),地瓜的调味品:[‘辣椒’, ‘孜然’] 地瓜
状态为熟了(5),地瓜的调味品:[‘辣椒’, ‘孜然’, ‘芥末’] 地瓜 状态为烧焦了(8),地瓜的调味品:[‘辣椒’, ‘孜然’,
‘芥末’, ‘大蒜’]
应用:存放家居
#面积:area ,可用面积:left_area,户型:info,地址:addr,contain_items:物品名称
class Home:
def __init__(self,new_area,new_info,new_addr):
self.area=new_area
self.info=new_info
self.addr=new_addr
self.left_area=new_area
self.contain_items=[]
def __str__(self):
msg="房子的总面积:%d,房子的剩余面积:%d,房子的户型:%s,房子的地址:%s"%(self.area,self.left_area,self.info,self.addr)
msg+="房子的当前物品:%s"%(str(self.contain_items))
return msg
def add_item(self,item):
#self.left_area -=item.area
#self.contain_items.append(item.name)
self.left_area -=item.get_area()
self.contain_items.append(item.get_name())
class Bad:
def __init__(self,new_name,new_area):
self.name=new_name
self.area=new_area
def __str__(self):
return "%s的占地面积:%d"%(self.name,self.area)
def get_area(self):
return self.area
def get_name(self):
return self.name
fangzi=Home(135,"三室一厅","上海市 浦东区 999号")
print(fangzi)
chuang=Bad("双人床",4)
print(chuang)
chuang1=Bad("三人床",5)
fangzi.add_item(chuang1)
print(fangzi)
fangzi.add_item(chuang)
print(fangzi)
结果: 房子的总面积:135,房子的剩余面积:135,房子的户型:三室一厅,房子的地址:上海市 浦东区 999号房子的当前物品:[]
双人床的占地面积:4 房子的总面积:135,房子的剩余面积:130,房子的户型:三室一厅,房子的地址:上海市 浦东区
999号房子的当前物品:[‘三人床’] 房子的总面积:135,房子的剩余面积:126,房子的户型:三室一厅,房子的地址:上海市 浦东区
999号房子的当前物品:[‘三人床’, ‘双人床’]