面向对象和面向过程
面向过程:核心过程二字,过程即解决问题的步骤,就是先干什么后干什么
基于该思想写程序就好比在这是一条流水线,是一种机械式的思维方式
优点:复杂的过程流程化
缺点:扩展性差
面向对象:核心是对象二字,对象指特征与技能的结合体
基于该思想编写程序就好比在创造一个世界,世界是由一个个对象组成,是一种‘上帝式’的思维方式
优点:可扩展性强
缺点:编程复杂度高,极容易出现过度设计的问题
类
对象是特征与技能的结合体,类就是一系列对象相似的特征与技能的结合体
在现实生活中:一定是先有一个个具体的对象,后总结出类
在程序中:一定是先定义类,后产生对象
class Students:
#初始化
def __init__(self,name,phone): #定义对象属性
self.name = name
self.phone = phone
def run(self): #定义对象技能
print('running......')
stu1 = Students('吉喆', 110) #实例化对象
print(stu1.name)
print(stu1.phone)
stu1.run()
stu2 = Students('李凯', 120)
print(stu2.name)
print(stu2.phone)
stu2.run()
面向对象有三大特性:
1.封装
1.封装是面相对性一大特点
2.面向对象编程的第一步--将属性和方法封装到一个抽象的类当中
3.外界使用类创建对象,然后让对象调用方法
4.对象方法的细节都被封装在类的内部
class Person: #定义类
def __init__(self,name,weight): #定义类的属性
self.name = name
self.weight = weight
def run(self): #这个类的技能
self.weight -= 0.5 #使用技能的效果
def eat(self): #类的技能
self.weight += 1
def __str__(self): #返回的数据
return '%s的体重是:%s' % (self.name, self.weight)
xiaoming = Person('小明',75) # 实例化 类
xiaoming.eat() #这个类使用的技能
xiaoming.eat() #这个类使用的技能
xiaoming.run() #这个类使用的技能
print(xiaoming) #输出这个实例化的分类
class Items():
def __init__(self,name,area):
self.name = name
self.area = area
class House():
def __init__(self,house_type,total_area):
self.house_type = house_type
self.total_area = total_area
self.free_area = total_area
self.items = []
def add_item(self,item):
if self.free_area >= item.area:
self.free_area -= item.area
self.items.append(item.name)
else:
print('面积太大,放不进去')
def __str__(self):
return '户型:%s|总面积:%s|剩余面积:%s|家具名称列表:%s|' % (self.house_type, self.total_area,self.free_area,self.items)
#实例化家具
bed = Items('席梦思',41)
chest = Items('衣柜',2)
table = Items('餐桌',1.5)
#实例化房子
house = House('地下室',20)
#添加家具
house.add_item(bed)
house.add_item(chest)
house.add_item(table)
print(house)