首页 > 其他分享 >实例方法,静态方法和类方法详解

实例方法,静态方法和类方法详解

时间:2023-03-10 12:22:18浏览次数:35  
标签:调用 静态方法 实例 self 详解 方法 Wei

实例方法,静态方法和类方法详解

和类属性一样,类方法也可以进行更细致的划分,具体可分为类方法、实例方法和静态方法

和类属性的分类不同,对于初学者来说, 区分这3中类方法是非常简单的,即采用@classmethod 修饰的方法为类方法,采用@staticmethod 修饰的方法为静态方法;不用任何修改的方法为实例方法

其中@classmethod 和@staticmethod 都是函数装饰器

类实例方法

通常情况下,再类中定义的方法默认都是实例方法。

类的构造方法理论上也属于实例方法,只不过它比较特殊。

下面的类中就用到了实例方法:

class Wei:
	# 类构造方法,也属于实例方法
    def __init(self):
        self.name = '帅哥'
        self.add = "http://c.biancheng.net"
    # 下面定义了一个say实例方法
    def say(self):
        print("正在调用say() 实例方法")

实例方法最大的特点就是,它最少也要包含一个self 参数,用于绑定调用此方法的实例对象(Python 会自动完成绑定)。实例方法通常会用类对象直接调用,例如:

shuaige = Wei()
shuaige.say()

运行结果:

正在调用say() 实例方法

当然,Python也支持使用类名调用实例方法,但此方法需要手动给 self 参数传值,例如:

# 类名调用实例方法,需要手动给 self 参数传值
shuaige = Wei()
Wei.say(shuaige)

运行结果:

正在调用 say() 实例方法

类方法

类方法和实例方法相似,它最少也要包含一个参数,只不过类方法中通常将其命名为 cls,Python会自动将类本身绑定给cls参数(注意,绑定的不是类对象)。 也就是说,我们在调用类方法时,无需显示为 cls 参数传参。

和 self一样,cls参数的命名也不是规定的(可以随意命名),知识Python程序员约定俗称的习惯而已

和实例方法最大的不同在于,类方法需要使用@classmethod 修饰符进行修饰,例如:

class Wei:
	# 类构造方法,也属于实例方法
    def __init(self):
        self.name = '帅哥'
        self.add = "http://c.biancheng.net"
    # 下面定义了一个类实例方法
	@classmethod
    def info(cls):
        print("正在调用类方法",cls)

注意,如果没有 @classmethod,则 Python 解释器会将 info() 方法认定为实例方法,而不是类方法。

类方法推荐使用类名直接调用,当然也可以使用实例对象来调用(不推荐)。例如,在Wei类的基础上,在该类外部添加如下代码:

# 使用类名直接调用类方法
Wei.info()
# 使用类对象调用类方法
shuaige = Wei()
shuaige.info()

运行结果:

正在调用类方法 <class '__main__.CLanguage'>
正在调用类方法 <class '__main__.CLanguage'>

类静态方法

静态方法,其实就是我们学过的函数,和函数唯一的区别是,静态方法定义在这空间 (类命名空间)中,而函数则定义在程序所在的空间(全局命名空间)中。

静态方法没有类似 self、cls 这样的特殊参数,因此Python解释器不会对它包含的参数做任何类或对象的绑定。也正因为如此,类的静态方法中无法调用任何类属性和类方法。

静态方法需要使用 @staticmethod 修饰,例如:

class Wei:
    @staticmethod
    def info(name,add)
    	print(name,add)

静态方法的调用,既可以使用类名,也可以使用类对象,例如:

# 使用类名直接调用静态方法
Wei.info("C语言中文网","http://c.biancheng.net")
# 使用类对象调用静态方法
shuaige = Wei()
shuaige.info("Python教程","http://c.biancheng.net/python")

运行结果为:

C语言中文网 http://c.biancheng.net
Python教程 http://c.biancheng.net/python

在实际编程中,几乎不会用到类方法和静态方法,因为我们完全可以使用函数代替它们实现想要的功能,但在一些特殊的场景中(例如工厂模式),使用类方法和静态方法也是很不错的喧杂

标签:调用,静态方法,实例,self,详解,方法,Wei
From: https://www.cnblogs.com/wei0919/p/17202971.html

相关文章

  • IDEA 类注释模板以及方法注释模板
    因为换电脑导致IDEA的类模板和方法模板注释设置丢失了,参考了网上的IDEA类注释模板以及方法注释模板自己定制了一个,备份一下以防万一。类注释模板:/****createTime:......
  • JAVA WEB项目文件夹上传下载方法
    ​ 第一点:Java代码实现文件上传FormFilefile=manform.getFile();StringnewfileName= null;Stringnewpathname= null;StringfileAddre= "/numUp";try{......
  • BSN-DDC基础网络详解(五):接入DDC网络(1)
    BSN-DDC基础网络推出已经一年了,得到了行业应用方和广大开发者的高度认可。一年中BSN产品技术团队也在根据市场业务需求不断更新功能服务,我们将通过本系列文章为大家系统化介......
  • 数组的方法之遍历篇
    forEach()//Array.prototype.forEach()方法对每个元素执行一次提供的回调函数;//第一个参数是我们提供的回调函数;//第二个参数thisArg:回调函数中this指向,即如果我们想......
  • 简单到复杂:C#拷贝文件的3种方法
        最近遇一个问题,一个程序调用另一个程序的文件,结果另一个程序的文件被占用,使用不了文件。这时候的解决方案就是把另一个程序的文件拷贝到当前程序就可以了。本文介......
  • python工具jupyternotebook页面打开空白问题解决方法
    jupyternotebook页面打开空白问题解决方法下载anaconda自带的jupyternotebook找到这个配置文件C:\Users\Administrator.jupyter\jupyter_notebook_config.py打开找......
  • C# HttpPost 【ContentType:multipart/form-data】表单提交 file 类型数据方法 2
    参考来源:https://blog.csdn.net/qq_39788123/article/details/128495546 try{Dictionary<string,string>headerDict=newDictiona......
  • oracle触发器详解
    原文地址: https://www.cnblogs.com/programmer-wind/archive/2011/09/10/2919585.html触发器是许多关系数据库系统都提供的一项技术。在ORACLE系统里,触发器类似过程和函......
  • Ubantu系统安装软件的方法
    方法一、直接在ubantu软件商店安装方法二、使用apt命令安装1.不止Ubantu,Dedbian系统的(Debain、Ubantu、Deepin、Raspbian等)都可以使用apt命令安装软件。2.Uba......
  • 方法论系列:用四个金字塔来说明金字塔原理
    一、综述之前发表的一系列博客主要以技术原理及应用为主,很少发布“方法论”相关的内容;在日常工作中有一些好的方法论的加持,可以让工作内容更顺利的推进,达到事半功倍的效果......