首页 / 知识
Python浅析类方法与静态方法
2023-11-12 13:41:00
类方法,静态方法的定义
python是双面向的,既可以面向函数编程,也可以面向对象编程,所谓面向函数就是单独一个.py文件,里面没有类,全是一些函数,调用的时候导入模块,通过模块名.函数名()即可调用,完全不需要类,那么你可能会问,那要类还有什么毛用?类就是用来面向对象编程啦,类可以有自己的属性,类可以创建很多实例,每个实例可以有不同的属性,这也就保存了很多私有的数据,总之都有存在的必要.
面向对象程序设计中,类方法和静态方法是经常用到的术语,逻辑上将:类方法只能由类名调用,静态方法可以由类名或者对象名调用。在python语法中,类有三种方法,分别是实例方法,静态方法,类方法
classFoo(object):
'''类三种方法语法形式'''
#在类中定义普通方法,在定义普通方法的时候,必须添加self
definstance_method(self):
print("是类{}的实例方法,只能被实例对象调用".format(Foo))
#在类中定义静态方法,在定义静态方法的时候,不需要传递任何类的东西
@staticmethod
defstatic_method():
print("是静态方法")
#在类中定义类方法,在定义类方法的时候,需要传递参数clscls即为类本身
@classmethod
defclass_method(cls):
print("是类方法")
foo=Foo()
foo.instance_method()
foo.class_method()
foo.static_method()
print("---------------")
Foo.static_method()
Foo.class_method()
可以看出:
实例方法只能被实例对象调用,静态方法(由@staticmethod装饰的方法)、类方法(由@classmethod装饰的方法),可以被类或类的实例对象调用。
实例方法,第一个参数必须要默认传实例对象,一般习惯用self。对象方法中有self参数,类方法有cls参数,静态方法是不需要这些附加参数(在c++中,是没有类这个概念)
静态函数(@staticmethod):即静态方法,静态方法是一类特殊的方法,有时候你可能需要填写一个属于这个类的方法,但是这些代码完全不会使用到实例对象本身。它主要处理这个类的逻辑关联,如验证数据;而且对参数没有要求。
类方法(@classmethod):即类方法,类方法不是绑定到对象上,而是绑定在类上的方法,它更关注于从类中调用方法,而不是从实例中调用方法,如构造重载;
成员函数:实例的方法,只能通过实例进行调用;第一个参数必须要默认传类,一般习惯用cls。
类方法与静态方法说明
1:self表示为类型为类的object,而cls表示为类也就是class
2:在定义普通方法的时候,需要的是参数self,也就是把类的实例作为参数传递给方法,如果不写self的时候,会发现报错TypeError错误,表示传递的参数多了,其实也就是调用方法的时候,将实例作为参数传递了,在使用普通方法的时候,使用的是实例来调用方法,不能使用类来调用方法,没有实例,那么方法将无法调用。
3:在定义静态方法的时候,和模块中的方法没有什么不同,最大的不同就是在于静态方法在类的命名空间之间,而且在声明静态方法的时候,使用的标记为@staticmethod,表示为静态方法,在叼你用静态方法的时候,可以使用类名或者是实例名来进行调用,一般使用类名来调用
4:静态方法主要是用来放一些方法的,方法的逻辑属于类,但是有何类本身没有什么交互,从而形成了静态方法,主要是让静态方法放在此类的名称空间之内,从而能够更加有组织性。
5:在定义类方法的时候,传递的参数为cls.表示为类,此写法也可以变,但是一般写为cls。类的方法调用可以使用类,也可以使用实例,一般情况使用的是类。
6:在重载调用父类方法的时候,最好是使用super来进行调用父类的方法。静态方法主要用来存放逻辑性的代码,基本在静态方法中,不会涉及到类的方法和类的参数。类方法是在传递参数的时候,传递的是类的参数,参数是必须在cls中进行隐身穿
7:python中实现静态方法和类方法都是依赖python的修饰器来实现的。静态方法是staticmethod,类方法是classmethod。
静态方法,类方法的使用区别
1:类方法用在模拟java定义多个构造函数的情况
由于python类中只能有一个初始化方法,不能按照不同的情况初始化类,举例如下:
classbook(object):
def__init__(self,title):
self.title=title
@classmethod
defcreat(cls,title):
book=cls(title=title)
returnbook
book1=book("python")
book2=book.creat("pythonismywork")
print(book1)
print(book2)
print(book1.title)
print(book2.title)
2:类中静态方法方法调用静态方法的情况
下面的代码,静态方法调用另一个静态方法,如果改用类方法调用静态方法,可以让cls代替类,(让代码看起来精简一些,也防止类名修改了,不用在类定义中修改原来的类名)
classfoo(object):
x=1
u=1
@staticmethod
defaverage(*mixes):
returnsum(mixes)/len(mixes)
@staticmethod
defstatic_method():
returnfoo.average(foo.x,foo.u)
@classmethod
defclass_method(cls):
returncls.average(cls.x,cls.u)
a=foo()
print(a.static_method())
print(a.class_method())
以上内容为大家介绍了Python浅析类方法与静态方法,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注我们http://www.mobiletrain.org/
最新内容
相关内容
linux系统名称命令?
linux系统名称命令?,系统,工作,地址,管理,信息,标准,名称,网络,命令,目录,Linux系统常见命令linux系统常用操作命令如下:ls:全拼list,功能是列出linux命令怎么给参数?
linux命令怎么给参数?,工作,认证,系统,地址,信息,密码,地方,命令,目录,文件,Linux命令1、linux系统常用操作命令如下:ls:全拼list,功能是列出目录linux命令行连数据库?
linux命令行连数据库?,地址,服务,信息,名字,数据库,密码,网络,一致,软件,系统,linux怎么连接mongodb数据库1、在这里使用的是MongoVUE进行连接linux命令代码怎么看?
linux命令代码怎么看?,时间,系统,代码,命令,状态,工具,情况,电脑,实时,基础,linux查看系统命令是什么有的,Linux中有多个命令可以用于查看文件linux命令只刷新参数?
linux命令只刷新参数?,工作,系统,地址,信息,命令,目录,管理,标准,文件,功能,Linux常用命令linux系统常用操作命令如下:ls:全拼list,功能是列出目怎么把数据库导入navicat?
怎么把数据库导入navicat?,软件,信息,密码,管理,数据库,服务,电脑,按钮,类型,文件,Navicat是一个强大的数据库管理工具,它可以连接和管理多种数Python中什么是反射?使用方法有哪
Python中什么是反射?使用方法有哪些?,信息,培训,状态,术语,检测,反射,属性,对象,字符串,方法,反射这个术语在很多语言中都存在,并且存在大量的比较好用的Python代码编辑器
比较好用的Python代码编辑器,代码,平台,环境,培训,教育,设计,数据,办公,人员,分析,Python是一款非常简单的编程语言,其功能使用起来都十分方便pycharm无法输入代码?
pycharm无法输入代码?,代码,环境,工具,分析,输入法,键盘,性能,计算机,问题,版本,PyCharm是一款Python语言开发的集成开发环境(IDE),它是许多Pytho大学生报名Python培训课程的好处是
大学生报名Python培训课程的好处是什么?,培训,企业,社会,项目,行业,工作,时间,技术,都会,素养,一、报名学习前沿技术在IT行业,技术在不断变化和python代码的规范建议
python代码的规范建议,代码,异常,二元,设计,数字,下降,一致,培训,标准,空行,1.一致性的建议打破一条既定规则的两个好理由当应用这个规则将导Python中有哪些方法可以解压文件?
Python中有哪些方法可以解压文件?,工具,系统,工作,培训,文件,文件夹,方法,窗体,不同于,以下内容,在Python学习和日常使用中,很容易造成文件过大