- 面向对象和面向过程的区别
- 对象和类
- 创建类
- 定义对象
类的三要素(对象、属性、方法)
1 类、对象、方法
# 定义一个类
class Car:
def drive(self):
print('我正在开车')
def turnover(self):
print('翻车了')
# 创建一个对象
momo = Car()
# 调用类方法
momo.drive()
momo.turnover()
结果为
我正在开车
翻车了
2 类的属性
可以在类中定义属性,也可以在对象中添加属性
class Car:
def drive(selt):
print('我正在开车')
def turnover(self):
print('翻车了')
#创建一个对象
xiao_jie_jie=Car()
xiao_jie_jie.drive()#调用xiao_jie_jie指向的对象的方法
xiao_jie_jie.turnover()
#添加属性,属性就是变量
xiao_jie_jie.name = '莫莫'
xiao_jie_jie.age = 18
print ("%s的年龄是%d"%(xiao_jie_jie.name,xiao_jie_jie.age))
结果为
我正在开车
翻车了
莫莫的年龄是18
class Car:
def drive(self):
print ("driving")
def turnover(self):
print ("turnover")
def __init__(self,name,age):
self.age = age
self.name = name
def feature(self):
print("%s的年龄是%d"%(self.name,self.age))
momo = Car("MM",18)
momo.drive()
momo.turnover()
momo.feature()
结果为
driving
turnover
MM的年龄是18
3 例子(煮面)
class Cook_instant_noodles:
def __init__(self):
self.cookedState = '生的'
self.cookedLevel = 0
def __str__(self):#相当于打印
return '泡面状态:%s(%d)'%(self.cookedState,self.cookedLevel)
def cook(self,cooked_time):
if self.cookedLevel >= 0 and self.cookedLevel < 3:
self.cookedState = '还没熟'
elif self.cookedLevel >= 3 and self.cookedLevel < 5:
self.cookedState = '半生不熟'
elif self.cookedLevel >= 5 and self.cookedLevel < 8:
self.cookedState = '煮熟了'
elif self.cookedLevel >= 8:
self.cookedState = '煮糊了'
#创建了一个泡面对象
instant_noodles = Cook_instant_noodles()
print(instant_noodles,"\n")
#开始煮泡面
instant_noodles.cook(2)
print(instant_noodles)
instant_noodles.cook(4)
print(instant_noodles)
instant_noodles.cook(6)
print(instant_noodles)
instant_noodles.cook(9)
print(instant_noodles)
结果为
泡面状态:生的(0)
泡面状态:还没熟(0)
泡面状态:还没熟(0)
泡面状态:还没熟(0)
泡面状态:还没熟(0)
有问题
class Cook_instant_noodles:
def __init__(self):
self.cookedState = '生的'
self.cookedLevel = 0
def __str__(self):
return '泡面状态:%s(%d)'%(self.cookedState,self.cookedLevel)
def cook(self,cooked_time):
self.cookedLevel = cooked_time
if cooked_time >= 0 and cooked_time < 3:
self.cookedState = '还没熟'
elif cooked_time >= 3 and cooked_time < 5:
self.cookedState = '半生不熟'
elif cooked_time >= 5 and cooked_time < 8:
self.cookedState = '煮熟了'
elif cooked_time >= 8:
self.cookedState = '煮糊了'
#创建了一个泡面对象
instant_noodles = Cook_instant_noodles()
print(instant_noodles,"\n")
#开始煮泡面
instant_noodles.cook(2)
print(instant_noodles)
instant_noodles.cook(4)
print(instant_noodles)
instant_noodles.cook(6)
print(instant_noodles)
instant_noodles.cook(9)
print(instant_noodles)
结果为
泡面状态:生的(0)
泡面状态:还没熟(2)
泡面状态:半生不熟(4)
泡面状态:煮熟了(6)
泡面状态:煮糊了(9)
OK了
监控每分钟的状态
class Cook_instant_noodles:
def __init__(self):
self.cookedState = '生的'
self.cookedLevel = 0
def __str__(self):
return '泡面状态:%s(%d)'%(self.cookedState,self.cookedLevel)
def cook(self,cooked_time):
self.cookedLevel = cooked_time
if cooked_time >= 0 and cooked_time < 3:
self.cookedState = '还没熟'
elif cooked_time >= 3 and cooked_time < 5:
self.cookedState = '半生不熟'
elif cooked_time >= 5 and cooked_time < 8:
self.cookedState = '煮熟了'
elif cooked_time >= 8:
self.cookedState = '煮糊了'
def cook_state(self,i): #监控每分钟的状态
for i in range(0,10):
instant_noodles.cook(i)
print(instant_noodles)
#创建了一个泡面对象
instant_noodles = Cook_instant_noodles()
print(instant_noodles,"\n")
#开始煮泡面
instant_noodles.cook_state(10)
结果为
泡面状态:生的(0)
泡面状态:还没熟(0)
泡面状态:还没熟(1)
泡面状态:还没熟(2)
泡面状态:半生不熟(3)
泡面状态:半生不熟(4)
泡面状态:煮熟了(5)
泡面状态:煮熟了(6)
泡面状态:煮熟了(7)
泡面状态:煮糊了(8)
泡面状态:煮糊了(9)
加入佐料
class Cook_instant_noodles:
def __init__(self):
self.cookedState = '生的'
self.cookedLevel = 0
self.condiments = []
self.J = ['a','b','c','d','e','f','g','h','i','j']
self.A = [1,2,3,4,5,6,7,8,9,10]
def __str__(self):
return '泡面状态:%s(%d),佐料有%s'%(self.cookedState,self.cookedLevel,str(self.condiments))
def cook(self,cooked_time):
self.cookedLevel = cooked_time
if cooked_time >= 0 and cooked_time < 3:
self.cookedState = '还没熟'
elif cooked_time >= 3 and cooked_time < 5:
self.cookedState = '半生不熟'
elif cooked_time >= 5 and cooked_time < 8:
self.cookedState = '煮熟了'
elif cooked_time >= 8:
self.cookedState = '煮糊了'
def addcondiments(self,thing):
self.condiments.append(thing)
def cook_state(self,A,J): #监控每分钟的状态
A = self.A
J = self.J
for i,j in zip(A,J):
instant_noodles.cook(i)
self.addcondiments(j)
print(instant_noodles)
#创建了一个泡面对象
instant_noodles = Cook_instant_noodles()
print(instant_noodles,"\n")
#开始煮泡面
instant_noodles.cook_state(10,'')
结果为
泡面状态:生的(0),佐料有[]
泡面状态:还没熟(1),佐料有['a']
泡面状态:还没熟(2),佐料有['a', 'b']
泡面状态:半生不熟(3),佐料有['a', 'b', 'c']
泡面状态:半生不熟(4),佐料有['a', 'b', 'c', 'd']
泡面状态:煮熟了(5),佐料有['a', 'b', 'c', 'd', 'e']
泡面状态:煮熟了(6),佐料有['a', 'b', 'c', 'd', 'e', 'f']
泡面状态:煮熟了(7),佐料有['a', 'b', 'c', 'd', 'e', 'f', 'g']
泡面状态:煮糊了(8),佐料有['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
泡面状态:煮糊了(9),佐料有['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
泡面状态:煮糊了(10),佐料有['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
参考
【1】Python面向对象编程从零开始(1)——从没对象到有对象
【2】Python面向对象编程从零开始(2)—— 与对象相互了解