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("\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 多态 类 静态的更多相关文章
- c++ 宏多态 动态多态和静态多态(转载)
转载出处:通道 多态(polymorphism)一词最初来源于希腊语polumorphos,含义是具有多种形式或形态的情形.在程序设计领域,一个广泛认可的定义是“一种将不同的特殊行为和单个泛化记号相关 ...
- C++的多态总结(静态&动态)
什么是多态 顾名思义就是同一个事物在不同场景下的多种形态. 静态多态 我们以前说过的函数重载就是一个简单的静态多态,静态多态是编译器在编译期间完成的,编译器会根据实参类型来选择调用合适的函数,如果有合 ...
- PHP 类属性 类静态变量的访问
php的类属性其实有两种,一种是类常量,一种是类静态变量.两种容易引起混淆. 如同静态类方法和类实例方法一样,静态类属性和实例属性不能重定义(同名),但静态属性可以和类常量同名. <?php c ...
- C++类静态数据成员与类静态成员函数
from:://http://blog.csdn.net/taina2008/article/details/1684834 把类中的函数都定义成静态函数,这样相当于在编译时就分配了空间,这样不需要实 ...
- python类静态变量
python的类静态变量直接定义在类中即可,不需要修饰符,如: 1 class Test: stc_attr = 1 def __init__(self,attr1,attr2): self.attr ...
- 《挑战30天C++入门极限》C++类静态数据成员与类静态成员函数
C++类静态数据成员与类静态成员函数 在没有讲述本章内容之前如果我们想要在一个范围内共享某一个数据,那么我们会设立全局对象,但面向对象的程序是由对象构成的,我们如何才能在类范围内共享数据呢? ...
- 9 python 多态与多态类
1.多态定义 多态指的是一类事物的多种形态 比如动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.ABCMeta): @abc.abstractm ...
- javascript多态 - 类形式实现demo
/* *多态 * 对传入的参数做判断以实现多种调用方式 */ //类形式实现 function Add(){ function zero(){ return 10; } function one(nu ...
- php访问类静态属性
在类的外部,如果要使用到类的静态变量,则可以使用 :: 操作符. <?php class A { static $x = 10; function test() { echo self::$x; ...
随机推荐
- js实现简单的评论和回复功能(数组版)
var method={ getDate:function (a,b){ //获取当前日期 //a表示年月日直接的分隔符,b表示时分秒之间的分隔符 var dateStr="", ...
- iOS的图片:解码(CPU)与内存(缓存)
图片的数据:资源数据(地址).原始数据(Data).显示数据(解码后的数据) 解压图片 - PNG或者JPEG压缩之后的图片文件会比同质量的位图小得多.但是在图片绘制到屏幕上之前,必须把它扩展成完整的 ...
- docker-6-DockerFile解析
1.是什么 Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本. 构建三步骤: 1.编写Dockerfile文件 2.docker build 3.docker ...
- virtualbox+vagrant学习-4-Vagrantfile-3-Minimum Vagrant Version
Minimum Vagrant Version 可以在Vagrantfile中指定一组vagrant版本需求,以强制人们使用带有Vagrantfile文件的vagrant特定版本.这可以帮助解决使用带 ...
- SSIS Debug
プロジェクト=>最后一项[DEPJ1200プロパテイページ] 1.配置...=>CreaeDeploymentUtility=True2.デパッグ=>Run64BiRuntime=f ...
- PAT——1073. 多选题常见计分法(20)
批改多选题是比较麻烦的事情,有很多不同的计分方法.有一种最常见的计分方法是:如果考生选择了部分正确选项,并且没有选择任何错误选项,则得到50%分数:如果考生选择了任何一个错误的选项,则不能得分.本题就 ...
- PAT——1034. 有理数四则运算
本题要求编写程序,计算2个有理数的和.差.积.商. 输入格式: 输入在一行中按照“a1/b1 a2/b2”的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分 ...
- linux 常用进程使用命令
查看进程占用pid ps aux | grep program_filter_word 杀死pid kill -
- IIS - 虚拟目录与应用程序的异同
在Windows 7 IIS7中,对服务器建立站点后,有二种添加子站点的方式 A. 虚拟目录 B. 应用程序 简单总结下二者之间的异同 A.虚拟目录 虚拟目录是指在站点下建立一个虚拟子目录 ...
- PLSQL Developer 12 注册码
PLSQL Developer 12 注册码product code: 4vkjwhfeh3ufnqnmpr9brvcuyujrx3n3le serial Number:226959 password ...