面向过程与面向对象的区别
面向过程,面面俱到,各个细节都要考虑
面向对象,只需要找到合适的助手,帮你处理问题就行
两种解决问题的思路而已
面向对象
object-oriented,简称OO,基于对象(实体)的概念创建模型,模拟客观世界分析、设计和实现软件的方法
面向对象编程
类
类class由三个部分构成
类的名称:类名
类的属性: 一组数据
类的方法: 允许对进行操作的方法(行为)
创建对象
tom = Cat()
调用对象的方法
tom.eat()
给对象添加属性
tom.name = "汤姆"
self
多个对象,self,通过哪个对象调用方法,自动将对象的引用传过去
__init__方法
初始化对象,魔法方法
__str__方法
return打印描述信息
全局变量和函数、对象属性和方法的区别
函数相当于把具有独立功能的封装起来 类 相当于把全局变量和函数又封装起来了
两个例子:烤红薯和装家具
class SweetPotato:
def __init__(self):
self.cookedString = "生的"
self.cookedLevel = 0
def __str__(self):
return "地瓜 状态:%s(%d)"%(self.cookedString, self.cookedLevel)
def cook(self, cooked_time):
self.cookedLevel += cooked_time
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 = "烤糊了"
#创建一个地瓜对象
di_gua = SweetPotato()
print(di_gua)
#开始烤地瓜
di_gua.cook(1)
print(di_gua)
di_gua.cook(1)
print(di_gua)
di_gua.cook(1)
print(di_gua)
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.get_area()
self.contain_items.append(item.get_name())
class Bed:
def __init__(self, new_name,new_area):
self.name = new_name
self.area = new_area
def get_area(self):
return self.area
def get_name(self):
return self.name
def __str__(self):
return "%s占用的面积是:%d"%(self.name, self.area)
fangzi = Home(129,"三室一厅","北京市 朝阳区 长安街 666号")
print(fangzi)
bed1 = Bed("席梦思", 4)
fangzi.add_item(bed1)
print(fangzi)
bed2 = Bed("三人床",6)
fangzi.add_item(bed2)
print(fangzi)