day2 self __init__ __str__

     

 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)

    

原文地址:https://www.cnblogs.com/venicid/p/7885618.html