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
--------------------------------------------------
原文地址:https://www.cnblogs.com/venicid/p/7890076.html