python的用途实例-python中类方法,实例方法,静态方法的作用和区别
Python中至少有三种比较常见的方法类型,即实例方法,类方法、静态方法。它们是如何定义的呢?如何调用的呢?它们又有何区别和作用呢?且看下文。
首先,这三种方法都定义在类中。下面我先简单说一下怎么定义和调用的。(PS:实例对象的权限最大。)
实例方法
定义:第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法(也可以传类的属性和方法);
调用:只能由实例对象调用。
类方法
定义:使用装饰器@classmethod。第一个参数必须是当前类对象,该参数名一般约定为“cls”,通过它来传递类的属性和方法(不能传实例的属性和方法);
调用:实例对象和类对象都可以调用。
静态方法
定义:使用装饰器@staticmethod。参数随意,没有“self”和“cls”参数,但是方法体中不能使用类或实例的任何属性和方法;
调用:实例对象和类对象都可以调用。
实例方法
简而言之,实例方法就是类的实例能够使用的方法。这里不做过多解释。
类方法
使用装饰器@classmethod。
原则上,类方法是将类本身作为对象进行操作的方法。假设有个方法,且这个方法在逻辑上采用类本身作为对象来调用更合理,那么这个方法就可以定义为类方法。另外,如果需要继承,也可以定义为类方法。
如下场景:
假设我有一个学生类和一个班级类,想要实现的功能为:
执行班级人数增加的操作、获得班级的总人数;
学生类继承自班级类,每实例化一个学生,班级人数都能增加;
最后,我想定义一些学生,获得班级中的总人数。
思考:这个问题用类方法做比较合适,为什么?因为我实例化的是学生,但是如果我从学生这一个实例中获得班级总人数,在逻辑上显然是不合理的。同时,如果想要获得班级总人数,如果生成一个班级的实例也是没有必要的。
classClassTest(object):__num =0
@classmethoddefaddNum(cls):
cls.__num += 1@classmethoddefgetNum(cls):return cls.__num
#这里我用到魔术函数__new__,主要是为了在创建实例的时候调用人数累加的函数。
def __new__(self):
ClassTest.addNum()return super(ClassTest, self).__new__(self)classStudent(ClassTest):def __init__(self):
self.name= ''a=Student()
b=Student()print(ClassTest.getNum())
静态方法
使用装饰器@staticmethod。
静态方法是类中的函数,不需要实例。静态方法主要是用来存放逻辑性的代码,逻辑上属于类,但是和类本身没有关系,也就是说在静态方法中,不会涉及到类中的属性和方法的操作。可以理解为,静态方法是个独立的、单纯的函数,它仅仅托管于某个类的名称空间中,便于使用和维护。
譬如,我想定义一个关于时间操作的类,其中有一个获取当前时间的函数。
importtimeclassTimeTest(object):def __init__(self, hour, minute, second):
self.hour=hour
self.minute=minute
self.second=second
@staticmethoddefshowTime():return time.strftime("%H:%M:%S", time.localtime())print(TimeTest.showTime())
t= TimeTest(2, 10, 10)
nowTime=t.showTime()print(nowTime)
如上,使用了静态方法(函数),然而方法体中并没使用(也不能使用)类或实例的属性(或方法)。若要获得当前时间的字符串时,并不一定需要实例化对象,此时对于静态方法而言,所在类更像是一种名称空间。
其实,我们也可以在类外面写一个同样的函数来做这些事,但是这样做就打乱了逻辑关系,也会导致以后代码维护困难。
以上就是我对Python的实例方法,类方法和静态方法之间的区别和作用的简要阐述。
面向对象知识补充
python的用途实例-python中类方法,实例方法,静态方法的作用和区别相关推荐
- python的用途实例-python 星号(*)的多种用途
结论 概括的来说,就是对修饰的变量进行拆分, 对修饰的形式参数进行参数聚集. 单*号,将被修饰的变量按元素方式拆分, 对修饰的形式参数进行参数聚集. 双**号,将被修饰的变量按键值对进行拆分, 对修饰 ...
- python的用途实例-python中pass语句意义与作用(实例分析)
想必大家都是刚刚才开始接触python这门语言的,今天这篇文章就来带大家来了解一下python这门语言之中常常会用到的一个语句pass语句.想必大家都很好奇python中pass作用是什么,接下来我就 ...
- python的用途实例-Python实例方法、类方法、静态方法的区别与作用详解
本文实例讲述了Python实例方法.类方法.静态方法的区别与作用.分享给大家供大家参考,具体如下: Python中至少有三种比较常见的方法类型,即实例方法,类方法.静态方法.它们是如何定义的呢?如何调 ...
- python的用途实例-python进程池作用展示及实例解析
在以下的文章之中我们来了解一下什么是python中的进程池.了解一下python进程池的相关知识,以及进程池在python编程之中能起到什么样的作用. 进程池 Pool类描述了一个工作进程池,他有几种 ...
- python的用途实例-Python基础之函数原理与应用实例详解
本文实例讲述了Python基础之函数原理与应用.分享给大家供大家参考,具体如下: 目标 函数的快速体验 函数的基本使用 函数的参数 函数的返回值 函数的嵌套调用 在模块中定义函数 01. 函数的快速体 ...
- python的用途实例-python assert的用处示例详解
使用assert断言是学习python一个非常好的习惯,python assert 断言句语格式及用法很简单.在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行最崩溃,不如在出现错误条件 ...
- python装饰器实例-python装饰器实例大详解
原标题:python装饰器实例大详解 一.作用域 在python中,作用域分为两种:全局作用域和局部作用域. 全局作用域是定义在文件级别的变量,函数名.而局部作用域,则是定义函数内部. 关于作用域,我 ...
- python多线程爬虫实例-Python实现多线程爬虫
编辑推荐: 本文主要介绍对Python多线程爬虫实战的整体的思路,希望对大家有帮助. 本文来知乎,由火龙果软件Alice编辑,推荐. 最近在写爬虫程序爬取亚马逊上的评论信息,因此也自学了很多爬虫相关的 ...
- python主要用途-学习Python的三大主要用途
如果你想学Python,或者你刚开始学习Python,那么你可能会问:"我能用Python做什么?"这个问题不好回答,因为Python用途太多了,以至于小编不知道如何回答,但是我可 ...
最新文章
- 滑动定位的三种方法,以及热启动(五)
- 习题3-3 数数字(Digit Counting , ACM/ICPC Danang 2007, UVa1225)
- python经典程序练习题-99道经典练习题助你全面掌握python基础知识,附技巧答案...
- 申请了团队blog,不知道能否给开通
- 求排序一堆整数,数据都是有限范围的和有限个数的,对他们进行排序,要求O(n)的时间复杂度....
- 25个实用编程小技巧
- main.js中的Vue.config.productionTip = false
- centos7装单机hadoop2.7.3
- 演练 小说排行榜 0912
- 转载 linux系统调用和库函数调用的区别
- 如何让MySQL语句执行加速
- 将获得到的json赋值到下拉框
- SpringBoot+Vue实现前后端分离的实习管理系统
- 一个计算机能插两块显卡吗,双显卡有什么好处(一台电脑安装两张不同的显卡)...
- 算法的复杂度度量--时间复杂度以及空间复杂度
- 【用python写一个简易的消息轰炸代码】
- 王者转号仅显示可转移的服务器,王者荣耀转移账号是免费的吗 角色转移进度怎么查看...
- F5负载均衡器通过iRules实现http应用的灵活转发
- AMBA总线协议AHB、APB、AXI对比分析
- linux复制操作 cp: -r not specified; omitting directory XXX 错误