zoukankan      html  css  js  c++  java
  • 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)

        

  • 相关阅读:
    Js计算时间差(天、小时、分钟、秒)
    [原创]chromium源码阅读-进程间通信IPC.消息的接收与应答
    loki之内存池SmallObj[原创]
    A Cross-Platform Memory Leak Detector
    UML Diagrams Using Graphviz Dot
    My Emacs Writing Setup
    Drawing Graphs using Dot and Graphviz
    SHFileOperation的用法
    latex中文模板
    C++ Design Pattern: What is a Design Pattern?
  • 原文地址:https://www.cnblogs.com/venicid/p/7885618.html
Copyright © 2011-2022 走看看