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("\t穿越火线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("\t穿越火线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("\t穿越火线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
--------------------------------------------------

day 5 多态 类 静态的更多相关文章

  1. c++ 宏多态 动态多态和静态多态(转载)

    转载出处:通道 多态(polymorphism)一词最初来源于希腊语polumorphos,含义是具有多种形式或形态的情形.在程序设计领域,一个广泛认可的定义是“一种将不同的特殊行为和单个泛化记号相关 ...

  2. C++的多态总结(静态&动态)

    什么是多态 顾名思义就是同一个事物在不同场景下的多种形态. 静态多态 我们以前说过的函数重载就是一个简单的静态多态,静态多态是编译器在编译期间完成的,编译器会根据实参类型来选择调用合适的函数,如果有合 ...

  3. PHP 类属性 类静态变量的访问

    php的类属性其实有两种,一种是类常量,一种是类静态变量.两种容易引起混淆. 如同静态类方法和类实例方法一样,静态类属性和实例属性不能重定义(同名),但静态属性可以和类常量同名. <?php c ...

  4. C++类静态数据成员与类静态成员函数

    from:://http://blog.csdn.net/taina2008/article/details/1684834 把类中的函数都定义成静态函数,这样相当于在编译时就分配了空间,这样不需要实 ...

  5. python类静态变量

    python的类静态变量直接定义在类中即可,不需要修饰符,如: 1 class Test: stc_attr = 1 def __init__(self,attr1,attr2): self.attr ...

  6. 《挑战30天C++入门极限》C++类静态数据成员与类静态成员函数

        C++类静态数据成员与类静态成员函数 在没有讲述本章内容之前如果我们想要在一个范围内共享某一个数据,那么我们会设立全局对象,但面向对象的程序是由对象构成的,我们如何才能在类范围内共享数据呢? ...

  7. 9 python 多态与多态类

    1.多态定义 多态指的是一类事物的多种形态 比如动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.ABCMeta): @abc.abstractm ...

  8. javascript多态 - 类形式实现demo

    /* *多态 * 对传入的参数做判断以实现多种调用方式 */ //类形式实现 function Add(){ function zero(){ return 10; } function one(nu ...

  9. php访问类静态属性

    在类的外部,如果要使用到类的静态变量,则可以使用 :: 操作符. <?php class A { static $x = 10; function test() { echo self::$x; ...

随机推荐

  1. 查看linux上面是否有安装redis,redis启动

    1.检测是否有安装redis-cli和redis-server; [root@localhost bin]# whereis redis-cli redis-cli: /usr/bin/redis-c ...

  2. 安装LAMP PHP的./configure 參数,未出现MYSQ

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/default7/article/details/30613781 编译參数: ./configure ...

  3. 2018-2019-2 网络对抗技术 20165322 Exp6 信息搜集与漏洞扫描

    2018-2019-2 网络对抗技术 20165322 Exp6 信息搜集与漏洞扫描 目录 实验原理 实验内容与步骤 各种搜索技巧的应用 DNS IP注册信息的查询 基本的扫描技术 漏洞扫描 基础问题 ...

  4. BZOJ2588:Count on a tree(主席树)

    Description 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答案,初始 ...

  5. 「CF1025D Recovering BST」

    题目 郑州讲过的题了 发现这是一个二叉搜索树,给出的还是中序遍历,我们很自然的想到我们需要可以用一个\(f[i][j][k](k\in[i,j])\)来表示区间\([i,j]\)能不能形成以\(k\) ...

  6. 【[POI2014]HOT-Hotels】

    魏佬怒嘲我只会做给定一棵树,输出有多少个点这种问题 不过我连这个也不会做 还算一道不错的树上数数题目 但是我一直不会数数 求树上所有的三元组\((u,v,t)\),满足\(dis(u,v)=dis(u ...

  7. Odoo中要根据某字段值作为条件判断值,但又不想在界面显示

    在视图标签中包含这个field(包含这个字段才可以使用该字段),但其invisible属性设置为1,即:该字段不可见. <field name="字段" invisible= ...

  8. [Python web开发] Web框架开发基础 (一)

    Python WEB框架 WSGI,WEB Server Gateway Interface,可以看做是一种底层协议,它规定了服务器程序和应用程序各自实现上面接口.Python的实现称为wsgiref ...

  9. ovs的卸载删除

    参考博客1 参考博客2 需要更新.重装ovs时需要先卸载. 删除网桥.端口 ovs-vsctl del-br 交换机名 ovs-vsctl del-port 交换机名 端口名(网卡名) 关闭服务 su ...

  10. ios宏定义字符串

    ios宏定义字符串 #define objcString(str) @""#str"" 使用效果: objcString(字符串)