python实例方法、类方法、静态方法的区别_Python 实例方法、类方法、静态方法的区别与作用...

Python 实例方法、类方法、静态方法的区别与作用

一、总结

一句话总结:

实例方法:第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法(也可以传类的属性和方法)

类方法:使用装饰器@classmethod。第一个参数必须是当前类对象,该参数名一般约定为“cls”,通过它来传递类的属性和方法(不能传实例的属性和方法)

静态方法:使用装饰器@staticmethod。参数随意,没有“self”和“cls”参数,但是方法体中不能使用类或实例的任何属性和方法

1、类方法介绍?

类方法是将类本身作为对象进行操作的方法。假设有个方法,且这个方法在逻辑上采用类本身作为对象来调用更合理,那么这个方法就可以定义为类方法

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

2、静态方法介绍?

静态方法主要是用来存放逻辑性的代码,逻辑上属于类,但是和类本身没有关系,也就是说在静态方法中,不会涉及到类中的属性和方法的操作。

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 实例方法、类方法、静态方法的区别与作用 - 失恋的蔷薇 - 博客园

https://www.cnblogs.com/wcwnina/p/8644892.html

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的实例方法,类方法和静态方法之间的区别和作用的简要阐述。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304844.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

逝者如斯,且听我胡说八道

【导读】嗯、转瞬即逝,还未来得及转身,2020就又这么溜了,溜了,趁其弥留之际,通过小作坊对2020年做个基本总结当我决心要写一篇总结时,我发现我要完了,这可不是一两个小时就能搞定的事情&#xf…

make: *** 没有规则可制作目标“distclean”。 停止。_Makefile伪目标

这一个章节我们主要讲的是 Makefile 中的伪目标。所谓的伪目标可以这样来理解,它并不会创建目标文件,只是想去执行这个目标下面的命令。伪目标的存在可以帮助我们找到命令并执行。使用伪目标有两点原因: 避免我们的 Makefile 中定义的只执行的命令的目标和工作目录下的实际文…

Lighttpd

Lighttpd Lighttpd是一个新兴的、轻量级的 web 服务器,它开始越来越多的应用在一些重要场合,如:YouTobe、Sourceforge、豆瓣…… Lighttpd 以安全、快速和内存消耗低著称,还专门为大型分布式连接环境做了优化,支持 Fas…

汇总:2017 年 IT 界最严重的裁员事件

裁员年年都有,今年特别多从微软、Oracle、IBM,到思科、HPE,再到雅虎、stackoverflow,无论是处于转型变革中的老牌巨头,还是日渐成熟的创新型公司,在动荡的科技行业,裁员风波一浪高过一浪&#x…

计算机结构优化,计算机结构与程序优化.ppt

《计算机结构与程序优化.ppt》由会员分享,可在线阅读,更多相关《计算机结构与程序优化.ppt(116页珍藏版)》请在人人文库网上搜索。1、计算机结构与程序优化,Introduction to Intel 64 Architectures Optimization,Main Purpose,处理器架构简介 SIMD指令介…

2020 年终总结:变化 积累

这是「进击的Coder」的第 32 篇个人随想作者:崔庆才之前写年终总结都是在每年正月,今年也不例外了。2020 年,对每个人来说都是特殊的一年,突入其来的新冠疫情给大家的生活带来了很大的变化,尤其上班年困难的时候&#…

11尺寸长宽 iphone_新手必知LED显示屏尺寸规格及计算方法

前言:LED屏幕在生活中,随处可见,显示屏、广播屏等等,但是LED尺寸怎么计算的,你知道吗?今天我们一起了解一下LED屏幕尺寸的计算方法。一、点间距的计算1、各单元板常见型号及尺寸LED屏普遍是用单元板做的。L…

正则表达式在python中的应用_学习正则表达式在python中的应用

目的:对文本的处理,正则表达式的功能很强大,可以很巧妙的过滤、匹配、获取想要的字符串,是必须学习的技能,这里只记录常用的写法,详细文档可以参看官方帮助文档。 环境:ubuntu 16.04 python 3.5…

ISA服务器之域内×××用户在外网通过CA验证连接域内×××服务器

一般情况下用户在连接服务器是是要输入密码的,如果这样的话,那么在一些公共场合输入密码的时候很有可能造成密码的泄露,从而造成不必要的损失。口令验证协议虽然硬件上的要求没有质询握手协议那么高,但是,在安全性上面…

高斯、柯西、拉格朗日都还在的话,他们应该最喜欢这个公众号

在现实生活中,你和谁在一起的确很重要,甚至能改变你的成长轨迹,决定你的人生成败。 是否还记得,当你跟学霸做同学的时候,你总会莫名其妙跟他一起撸题目;当宿舍其他兄弟正在打游戏的时候,你也想着…

div css标记,前端初学者必学的div加css标签

原标题:前端初学者必学的div加css标签今天给大家分享前端初学者必须要学习的标签,这些标签你都会了吗?DIV加css标签页头:header登录条:loginBar标志:logo侧栏:sideBar广告:banner导航:nav子导航:subNav菜单:menu子菜单:subMenu搜索:search滚动…

python123动物重量排序_Python爬虫图片学习(一)

Python爬虫学习 一、Python安装与调用 python官网安装地址:https://www.python.org/python帮助手册:在本机的路径C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Doc 创建一个1.py文件,右键打开.py文件,用IDLE方…

巧用ActionFilterAttribute实现API日志的记录

背景上回提到开发web api的时候&#xff0c;一般是需要记录api的输入输出信息&#xff0c;方便后续排查问题&#xff1b;使用的是委托的形式进行记录日志。使用Func<T, TResult> 委托实现API日志的记录这次我们使用另外一种方式&#xff0c;Filter来记录输入输出日志。实…

activity 防止多次打开_Android开发Activity任务和返回栈

任务是用户在执行某项工作时与之互动的一系列 Activity 的集合。这些 Activity 按照每个 Activity 打开的顺序排列在一个返回堆栈中。例如&#xff0c;电子邮件应用可能有一个 Activity 来显示新邮件列表。当用户选择一封邮件时&#xff0c;系统会打开一个新的 Activity 来显示…

全程图解:Centos 5.2 下 ORACLE10G 安装配置

1、检查并安装ORACLE必须的软件包在CENTOS上安装Oracle&#xff0c;需要将ORACLE所必须的软件包逐一安装, 参考Oracle安装文档关于Red Hat Enterprise Linux 4.0部分&#xff0c;所需的软件包如下:binutils-2.17.50.0.6-6.el5compat-db-4.2.52-5.1compat-libstdc-33-3.2.3-61co…

css原生样式支持,原生JS读写CSS样式的方法

通过Element对象的getAttribute()、setAttribute()、removeAttribute()直接读写style属性如&#xff1a;elm.setAttribute(style,color:red;line-height:30px);利用document.styleSheets属性&#xff0c;返回当前页面的所有StyleSheet对象(即所有样式表)&#xff0c;它是一个只…

提升代码可读性的 10 个技巧

具有较强可读性的代码&#xff0c;能帮助你调试程序&#xff0c;不让自己活得太累。 代码可读性是计算机编程领域中普遍存在的问题。这也是我们成为开发者首先要学习的事情之一。本文会详细介绍在编写强可读性代码时最佳实践中最重要的一部分内容。 1 - 注释和文档 IDE&#xf…

phpsotrm怎么 搜索功能_Windows 10 网络搜索设计太反人类?教你如何彻底关闭它

来源&#xff1a;太平洋电脑网我们知道微软在Windows 10中&#xff0c;特别加强了系统的搜索功能&#xff0c;但Windows 10的搜索的确很难称得上好用。抛开效率低下、呈现结果少、造成系统卡顿等老生常谈的问题不论&#xff0c;在功能设计方面&#xff0c;Windows 10搜索也有硬…

支撑性服务 自动化能力

连载传送门&#xff1a;什么是云原生&#xff1f;云原生设计理念.NET 微服务谈到云原生&#xff0c;绕不开“容器化”Backing services云原生系统依赖于许多不同的辅助资源&#xff0c;例如数据存储、消息队列、监视和身份服务&#xff0c;这些服务统称为支撑性服务。下图显示了…

网站logo放在服务器,自己建网站如何设计网站LOGO

LOGO是一个网站的形象代表或者说是品牌的象征&#xff0c;用户记住了网站LOGO&#xff0c;就相当于记住了网站&#xff0c;因此&#xff0c;自己建网站时要融入网站LOGO的设计&#xff0c;潜移默化地把LOGO形象植入用户脑海中&#xff0c;把网站与LOGO紧密连接在一起&#xff0…