zoukankan      html  css  js  c++  java
  • day 5 多态 类 静态

    1.多态

    执行的时候才知道调用谁

     class Dog(object):
         def print_self(self):
             print("大家好,我是来自西安的小白")
     
     class Xiaotq(object):
         def print_self(self):
             print("hello everyone,I am jack")
     
     def instroduce(temp):   #temp传入的dog1 dog2的引用
         temp.print_self()
     
     dog1 = Dog()
     dog2 = Xiaotq()
     
     instroduce(dog1)
     instroduce(dog2)
    大家好,我是来自西安的小白
    hello everyone,I am jack

                        

          

    2.面向对象的3要素

    封装:把函数和全局变量找个东西封装起来

    继承:一个子类 继承父类的功能

    多态:定义的时候,不确定调用哪个类中的方法,而是等到真正调用的之后才确定

    3.多态的理解

      1)app按钮的字体

        

      2)cf人物

        

    3.类属性,实例属性  和 类对象,实例对象

     类对象实际上也是在内存开辟一块空间

    类属性是公用的

    实例属性只是这个实例对象独有的

         1)版本1:创建一个工具,工具数量加1

     class Tool(object):
     
         #方法
         def __init__(self,new_name):
             self.name = new_name
     
     num = 0
     tool1 = Tool("镰刀")
     num +=1
     tool2 = Tool("锤子")
     num +=1
     tool3 = Tool("步枪")
     num +=1
     print(num)

      2)版本2:类属性,共有

     class Tool(object):
     
         #类属性 共有的
         num = 0
         #方法
         def __init__(self,new_name):
             self.name = new_name  #self.name 是实例属性 ,实例对象独有的
             #对类属性 +1
             Tool.num += 1
     
     tool1 = Tool("镰刀")
     tool2 = Tool("锤子")
     tool3 = Tool("步枪")
     print(Tool.num)

        

     4.类方法,实例方法

       1)版本 1:类方法修改类属性   通过类调用类属性

     class Game(object):
     
         #类属性  也可以通过类方法进行修改
         num = 0
     
         #实例方法
         def __init__(self): #self 指向实例对象
             #实例属性  可以通过公有的实例方法进行修改
             self.name = "langwang"
     
         #类方法
         @classmethod
         def add_num(cls):  #cls指向类对象
             cls.num += 1
     
     game1 = Game()
     Game.add_num()
     print(Game.num)
    python@ubuntu:~/pythonS6/python基础08$ python3 15-类方法.py 
    1

      2)版本2: 通过实例化对象调用类方法

     class Game(object):
     
         #类属性  也可以通过类方法进行修改
         num = 0
     
         #实例方法
         def __init__(self): #self 指向实例对象
             #实例属性  可以通过公有的实例方法进行修改
             self.name = "langwang"
     
         #类方法
         @classmethod
         def add_num(cls):  #cls指向类对象
             cls.num += 1
     
     game1 = Game()
     #Game.add_num()  #可以通过类的名字调用类方法
     game1.add_num()  #也可以通过这个类实例化的对象 调用这个类方法
     print(Game.num)

    5. 静态方法

     完成基本的功能,和类没有关系,和实例对象也没有关系

      1)版本1:class类 和 def函数 混用

    class Game(object):
    
        #类属性  也可以通过类方法进行修改
        num = 0
    
        #实例方法
        def __init__(self): #self 指向实例对象
            #实例属性  可以通过公有的实例方法进行修改
            self.name = "langwang"
    
        #类方法
        @classmethod
        def add_num(cls):  #cls指向类对象
            cls.num += 1
    
    def print_menu():
        print("-"*50)
        print("	穿越火线V34")
        print("1.start this game")
        print("2. exit the game")
        print("-"*50)
    
    game1 = Game()
    #Game.add_num()  #可以通过类的名字调用类方法
    game1.add_num()  #也可以通过这个类实例化的对象 调用这个列方法
    print(Game.num)
    
    print_menu()
    1
    --------------------------------------------------
        穿越火线V34
    1.start this game
    2. exit the game
    --------------------------------------------------

      

      2)版本2:静态方法,和class 和实例对象无关

    class Game(object):
    
        #类属性  也可以通过类方法进行修改
        num = 0
    
        #实例方法
        def __init__(self): #self 指向实例对象
            #实例属性  可以通过公有的实例方法进行修改
            self.name = "langwang"
    
        #类方法
        @classmethod
        def add_num(cls):  #cls指向类对象
            cls.num += 1
    
        #静态方法
        @staticmethod
        def print_menu():
            print("-"*50)
            print("	穿越火线V34")
            print("1.start this game")
            print("2. exit the game")
            print("-"*50)
    
    game1 = Game()
    #Game.add_num()  #可以通过类的名字调用类方法
    game1.add_num()  #也可以通过这个类实例化的对象 调用这个列方法
    print(Game.num)
    
    #print_menu()   #调用函数
    Game.print_menu()  #通过类 去调用静态方法
    1
    --------------------------------------------------
        穿越火线V34
    1.start this game
    2. exit the game
    --------------------------------------------------

      

      3)版本3:

    class Game(object):
    
        #类属性  也可以通过类方法进行修改
        num = 0
    
        #实例方法
        def __init__(self): #self 指向实例对象
            #实例属性  可以通过公有的实例方法进行修改
            self.name = "langwang"
    
        #类方法
        @classmethod
        def add_num(cls):  #cls指向类对象
            cls.num += 1
    
        #静态方法
        @staticmethod
        def print_menu():
            print("-"*50)
            print("	穿越火线V34")
            print("1.start this game")
            print("2. exit the game")
            print("-"*50)
    
    game1 = Game()
    #Game.add_num()  #可以通过类的名字调用类方法
    game1.add_num()  #也可以通过这个类实例化的对象 调用这个列方法
    print(Game.num)
    
    #print_menu()   #调用函数
    #Game.print_menu()  #通过类 去调用静态方法
    game1.print_menu()  #通过实例对象 去调用静态方法
    1
    --------------------------------------------------
        穿越火线V34
    1.start this game
    2. exit the game
    --------------------------------------------------
  • 相关阅读:
    linux tar order
    Linux驱动学习步骤(转载)
    汇编指令(转载)
    拓扑排序
    python 三维坐标图
    python 矩阵
    spring 之 IOC 依赖注入详解
    spring 下载
    Struts数据验证
    拦截器配置
  • 原文地址:https://www.cnblogs.com/venicid/p/7890076.html
Copyright © 2011-2022 走看看