1 self 谁调用指向谁自己 相当于其他语言的this
#1.类名
class Cat(): #大驼峰的命名规范
#2.类的属性
#3.类的方法
def eat(self):
print("我在吃东西。。。")
def run(self):
print("我在跑步")
#第二种 获取对象的属性
def instroduce(self):
print("%s的年龄是%d"%(self.name,self.age)) #self
#创建一个对象
tom = Cat()
#调用tom指向的对象中的 方法
tom.eat()
tom.run()
#给tom指向的对象添加2个属性
tom.name = "汤姆"
tom.age = 18
tom.instroduce() #相当于 tom.instroduce(tom)
lanmao = Cat()
lanmao.name = "蓝猫"
lanmao.age = 13
lanmao.instroduce()
2 .__init__方法 魔法方法
class Cat():
'''定义1个Cat类'''
def __init__(self): #python解释器自动执行__init__方法
print("---haha----")
def eat(self):
print("我在吃东西。。。")
def run(self):
print("我在跑步")
def instroduce(self):
print("%s的年龄是%d"%(self.name,self.age))
#创建一个对象
tom = Cat()
tom.eat()
tom.run()
tom.name = "汤姆"
tom.age = 18
tom.instroduce()
lanmao = Cat()
lanmao.name = "蓝猫"
lanmao.age = 13
lanmao.instroduce()
3 .__init__方法的流程
class Cat():
'''定义1个Cat类'''
#初始化一个对象
def __init__(self,new_name,new_age):
self.name = new_name
self.age = new_age
def eat(self):
print("我在吃东西。。。")
def run(self):
print("我在跑步")
def instroduce(self):
print("%s的年龄是%d"%(self.name,self.age))
#创建一个对象
tom = Cat("汤姆",33)
tom.eat()
tom.run()
#tom.name = "汤姆"
#tom.age = 18
tom.instroduce()
lanmao = Cat("蓝猫",22)
#lanmao.name = "蓝猫"
#lanmao.age = 13
lanmao.instroduce()
4.__str__方法 魔法方法 获取对象的描述信息
调用的是对象里面的name,age
1)版本1:
class Cat():
'''定义1个Cat类'''
def __init__(self,new_name,new_age):
self.name = new_name
self.age = new_age
def eat(self):
print("我在吃东西。。。")
def run(self):
print("我在跑步")
def instroduce(self):
print("%s的年龄是%d"%(self.name,self.age))
#创建一个对象
tom = Cat("汤姆",33)
lanmao = Cat("蓝猫",22)
print(tom)
print(lanmao)
####执行结果
python@ubuntu:~/pythonS6/python基础07$ python3 10-__str__.py
<__main__.Cat object at 0x7f2030af3978>
<__main__.Cat object at 0x7f2030af39b0>
2)版本2:
class Cat():
'''定义1个Cat类'''
def __init__(self,new_name,new_age):
self.name = new_name
self.age = new_age
def __str__(self):
return("hahah")
def eat(self):
print("我在吃东西。。。")
def run(self):
print("我在跑步")
def instroduce(self):
print("%s的年龄是%d"%(self.name,self.age))
#创建一个对象
tom = Cat("汤姆",33)
lanmao = Cat("蓝猫",22)
print(tom)
print(lanmao)
### 结果
hahah
hahah
3)版本3:
class Cat():
'''定义1个Cat类'''
def __init__(self,new_name,new_age):
self.name = new_name
self.age = new_age
## 获取对象的描述信息
def __str__(self):
return("%s的年龄是%d"%(self.name,self.age)) #调用的是对象内存中的name,age
def eat(self):
print("我在吃东西。。。")
def run(self):
print("我在跑步")
def instroduce(self):
print("%s的年龄是%d"%(self.name,self.age))
#创建一个对象
tom = Cat("汤姆",33)
lanmao = Cat("蓝猫",22)
print(tom)
print(lanmao)
#### 执行结果
汤姆的年龄是33
蓝猫的年龄是22
5.全局变量,函数 和属性,方法的区别
6.小应用:烤地瓜
1)版本1:
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) di_gua.cook(1) print(di_gua) di_gua.cook(1) print(di_gua) di_gua.cook(1) print(di_gua) di_gua.cook(1) print(di_gua)
地瓜状态:生的(0) 地瓜状态:生的(1) 地瓜状态:生的(2) 地瓜状态:半生不熟(3) 地瓜状态:半生不熟(4) 地瓜状态:熟了(5) 地瓜状态:熟了(6) 地瓜状态:熟了(7)
2)版本2:添加作料
class SweetPotato: def __init__(self): self.cookedString = '生的' self.cookedLevel = 0 self.add_list = [] def __str__(self): return "地瓜状态:%s(%d)添加了%s"%(self.cookedString,self.cookedLevel,str(self.add_list)) 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 = "烤糊了" def add(self,add_something): self.add_list.append(add_something) #创建一个对象 di_gua = SweetPotato() print(di_gua) #开始烤地瓜 di_gua.cook(1) print(di_gua) di_gua.cook(1) print(di_gua) di_gua.cook(1) di_gua.add("葱") print(di_gua) di_gua.cook(1) di_gua.add("蒜") print(di_gua) di_gua.cook(1) print(di_gua) di_gua.cook(1) di_gua.add("酱") print(di_gua) di_gua.cook(1) print(di_gua)
地瓜状态:生的(0)添加了[] 地瓜状态:生的(1)添加了[] 地瓜状态:生的(2)添加了[] 地瓜状态:半生不熟(3)添加了['葱'] 地瓜状态:半生不熟(4)添加了['葱', '蒜'] 地瓜状态:熟了(5)添加了['葱', '蒜'] 地瓜状态:熟了(6)添加了['葱', '蒜', '酱'] 地瓜状态:熟了(7)添加了['葱', '蒜', '酱']
3)版本3:优化版
class SweetPotato: '''定义了一个地瓜类''' def __init__(self): self.cookedString = '生的' self.cookedLevel = 0 self.add_list = [] #为了能够存储多个数据,往往在开发中让一个属性是列表list def __str__(self): return "地瓜状态:%s(%d)添加了%s"%(self.cookedString,self.cookedLevel,str(self.add_list)) def cook(self,cooked_time): #因为这个方法被调用了多次,为了能够再一次调用这个方法的时候 能够获取到上一次调用这个方法的cooked_time #所以需要在此,把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 = "烤糊了" def add(self,add_something): self.add_list.append(add_something) #创建一个对象 di_gua = SweetPotato() print(di_gua) #开始烤地瓜 di_gua.cook(1) print(di_gua) di_gua.cook(1) print(di_gua) di_gua.cook(1) di_gua.add("葱") print(di_gua) di_gua.cook(1) di_gua.add("蒜") print(di_gua) di_gua.cook(1) print(di_gua) di_gua.cook(1) di_gua.add("酱") print(di_gua) di_gua.cook(1) print(di_gua)
7.小应用:存放家居
1)版本1:
#1.定义房子类 class Home: def __init__(self,new_area,new_info,new_addr): self.area = new_area self.info = new_info self.addr = new_addr def __str__(self): return "房子面积是:%d,户型是:%s,地址是:%s"%(self.area,self.info,self.addr) #2,创建对象房子 fangzi = Home(200,"三室一厅","北京朝阳区") print(fangzi)
2)版本2:创建床类
#1.定义房子类 class Home: def __init__(self,new_area,new_info,new_addr): self.area = new_area self.info = new_info self.addr = new_addr def __str__(self): return "房子面积是:%d,户型是:%s,地址是:%s"%(self.area,self.info,self.addr) class Bed: '''定义床类''' 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) #2,创建对象房子 fangzi = Home(200,"三室一厅","北京朝阳区") print(fangzi) #创建床对象 bed1 = Bed("双人床",5) print(bed1)
3)版本3:添加床到房子里面
#1.定义房子类 class Home: def __init__(self,new_area,new_info,new_addr): self.area = new_area self.info = new_info self.addr = new_addr def __str__(self): message = "房子面积是:%d,户型是:%s,地址是:%s"%(self.area,self.info,self.addr) message += "剩余面积是%s"%self.area return message def add(self,item): self.area -= item.area class Bed: '''定义床类''' 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) #2,创建对象房子 fangzi = Home(200,"三室一厅","北京朝阳区") print(fangzi) #创建床对象 bed1 = Bed("双人床",5) print(bed1) fangzi.add(bed1) print(fangzi)
房子面积是:200,户型是:三室一厅,地址是:北京朝阳区剩余面积是200
双人床占用大面积是5
房子面积是:195,户型是:三室一厅,地址是:北京朝阳区剩余面积是195
4)版本4:打印房子的物品
#1.定义房子类 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): message = "房子面积是:%d,剩余面积%s,户型是:%s,地址是:%s,物品有%s"%(self.area,self.left_area,self.info,self.addr,str(self.contain_items)) return message def add(self,item): self.left_area -= item.area self.contain_items.append(item.name) class Bed: '''定义床类''' 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) #2,创建对象房子 fangzi = Home(200,"三室一厅","北京朝阳区") print(fangzi) #创建床对象 bed1 = Bed("双人床",5) print(fangzi) fangzi.add(bed1) print(fangzi)
房子面积是:200,剩余面积200,户型是:三室一厅,地址是:北京朝阳区,物品有[] 房子面积是:200,剩余面积200,户型是:三室一厅,地址是:北京朝阳区,物品有[] 房子面积是:200,剩余面积195,户型是:三室一厅,地址是:北京朝阳区,物品有['双人床']
5)版本5:推荐调用bed里面方法
房子面积是:200,剩余面积200,户型是:三室一厅,地址是:北京朝阳区,物品有[] 房子面积是:200,剩余面积200,户型是:三室一厅,地址是:北京朝阳区,物品有[] 房子面积是:200,剩余面积200,户型是:三室一厅,地址是:北京朝阳区,物品有[] 房子面积是:200,剩余面积195,户型是:三室一厅,地址是:北京朝阳区,物品有['双人床'] 房子面积是:200,剩余面积186,户型是:三室一厅,地址是:北京朝阳区,物品有['双人床', '架子床']
#1.定义房子类 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): message = "房子面积是:%d,剩余面积%s,户型是:%s,地址是:%s,物品有%s"%(self.area,self.left_area,self.info,self.addr,str(self.contain_items)) return message def add(self,item): # self.left_area -= item.area #self.contain_items.append(item.name) self.left_area -= item.get_area() #推荐用bed的方法 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 __str__(self): return "%s占用大面积是%d"%(self.name,self.area) def get_name(self): return self.name def get_area(self): return self.area #2,创建对象房子 fangzi = Home(200,"三室一厅","北京朝阳区") print(fangzi) #创建床对象 bed1 = Bed("双人床",5) print(fangzi) bed2 = Bed("架子床",9) print(fangzi) fangzi.add(bed1) print(fangzi) fangzi.add(bed2) print(fangzi)