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 --------------------------------------------------