python之类方法和静态方法
在类中定义的函数称为方法,主要有三种:实例方法、类方法、静态方法。
class MyTest():
# 普通实例函数
def func1(self, arg1, arg2):
pass
# 类函数
@classmethod
def func2(cls, arg1, agr2):
pass
# 静态函数
@staticmethod
def func3(arg1, agr2):
pass
三种函数的区别:
实例方法(instancemethod) |
类方法(classmethod) | 静态方法(staticmethod) | |
|---|---|---|---|
| 定义方式 | self作为第一个参数 | cls作为第一个参数 | 无强制参数 |
| 参数绑定的对象 | 类的实例,即用self来传递当前类的实例 | 类对象,即用cls传递当前类对象 | 无 |
| 调用方式 | 只能通过类的实例调用 | 类对象或类的实例均可调用 | 类对象或类的实例均可调用 |
| 访问类/实例成员 | 可访问类成员,不可访问实例成员 | 均不可访问类成员和实例成员 |
由于classmethod和staticmethod方法可以直接使用类对象调用,因此可在类实例化之前,通过classmethod或staticmethod方法,对类做一定的交互,提供额外的构造实例。
class Date():
'''类成员'''
day = 0
month = 0
year = 0 def __init__(self, year=0, month=0, day=0,):
'''实例成员'''
self.year = year
self.month = month
self.day = day # 类函数
# (PS:由于cls表示类对象,而不是类实例。因此如果我们继承Date类,那么所有的子类也都将拥有trans_date1这个方法。)
@classmethod
def trans_date1(cls, date_of_string):
# print(cls.year) true, @classmethod可访问类成员,无法访问实例成员
year, month, day = map(int, date_of_string.split('-'))
return cls(year, month, day) # 返回类的实例 # 静态函数
@staticmethod
def trans_date2(string_data):
# print(year) false, @staticmethod均不可访问类成员和实例成员
year, month, day = map(int, string_data.split('-'))
return Date(year, month, day) # 返回类的实例 def out_date(self):
print("year: ", self.year)
print("month: ", self.month)
print("day: ", self.day) if __name__ == "__main__":
# date = Date(2020, 8, 25)
'''不需实例化类,直接通过 类名.函数名 调用类方法'''
date1 = Date.trans_date1("2020-08-25")
date1.out_date()
'''不需实例化类,直接通过 类名.函数名 调用静态方法'''
date2 = Date.trans_date2("2020-08-25")
date2.out_date() 运行结果:
year: 2020
month: 8
day: 25
year: 2020
month: 8
day: 25
参考:https://www.cnblogs.com/agnewee/p/5653936.html
python之类方法和静态方法的更多相关文章
- Python普通方法、静态方法、类方法
开始 # -*-coding:utf-8-*- # 普通方法,类方法,静态方法的区别 __metaclass__ = type class Tst: name = 'tst' data = 'this ...
- 记录一个 关于 python 普通方法,静态方法和类方法 的介绍。@classmethod @staticmethod
上班时间 只贴看到最厉害的答案 回头总结 http://stackoverflow.com/questions/12179271/python-classmethod-and-staticmethod ...
- python ——面向对象进阶(反射,双下线方法,静态方法,类方法)
属性 如果你已经了解Python类中的方法,那么属性就非常简单了,因为Python中的属性其实是普通方法的变种. 哎,其实就是这样,我们看一下当我们想查看税后工资的时候,这其实是一个人的属性,但是它却 ...
- Python的3个方法:静态方法(staticmethod),类方法(classmethod)和实例方法
Python的方法主要有3个,即静态方法(staticmethod),类方法(classmethod)和实例方法,如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
- Python进阶----类的结构(公有成员 , 私有成员(私有属性,私有方法),类方法,静态方法,属性) ,isinstance 和issubcalss ,元类(type())
Python进阶----类的结构(公有成员 , 私有成员(私有属性,私有方法),类方法,静态方法,属性) ,isinstance 和issubcalss ,元类(type()) 一丶类的结构细分 ...
- Python笔记_第四篇_高阶编程_实例化方法、静态方法、类方法和属性方法概念的解析。
1.先叙述静态方法: 我们知道Python调用类的方法的时候都要进行一个实例化的处理.在面向对象中,一把存在静态类,静态方法,动态类.动态方法等乱七八糟的这么一些叫法.其实这些东西看起来抽象,但是很好 ...
- Python 属性方法、类方法、静态方法、 特殊属性__doc__ (内建属性)
总结:和类的关联性讲:属性方法>类方法>静态方法 属性方法@property:仅仅是调用方式不用+括号. 类方法@classmethod:访问不了累的属性变量,只可以访问类变量. 静态方法 ...
- Python基础之类方法和静态方法
小叙一会儿: 通常情况下,在类中定义的所有函数(注意了,这里说的就是所有,跟self啥的没关系,self也只是一个再普通不过 的参数而已)都是对象的绑定方法,对象在调用绑定方法时会自动将自己作为参数传 ...
- python类属性和对象属性、类的普通方法和静态方法
类属性和对象属性的定义 class LearnClass(): #类属性 cls_attr = None def __init__(self,arg): #对象属性 self.obj_attr = a ...
随机推荐
- next()与nextLine()的区别
abc def ghij kl mno pqr st uvw xyz 你用next(),第一次取的是abc,第二次取的是def,第三次取的是ghij 你用nextLine(),第一次取的是abc de ...
- Spark从入门到放弃---RDD
什么是Spark? 关于Spark具体的定义,大家可以去阅读官网或者百度关于Spark的词条,在此不再赘述.从一个野生程序猿的角度去理解,作为大数据时代的一个准王者,Spark是一款主流的高性能分布式 ...
- TfidfVectorizer、CountVectorizer 和 TfidfTransformer 的简单教程
TfidfVectorizer.CountVectorizer 和 TfidfTransformer 是 sklearn 中处理自然语言常用的工具.TfidfVectorizer 相当于 CountV ...
- Promise 方法
functionB(){ this.functionA() } functionA(){ return new Promise((resolve, reject) => { this.$http ...
- git操作练习
github账号注册很久了,使用过idea的版本管理,但是命令行还不会.正好新写了一个小项目,练习一下如何上传到github. @ 目录 新建github仓库 安装git 上传项目 1.创建本地版本库 ...
- Robotium和Espresso大PK——速度篇
引言 Espresso和Robotium都是android UI自动化测试框架,且都是建立在Android Instrument的基础之上.对于测试人员来说,UI测试应该具备如下三个特点:1. 容易编 ...
- Flink的应用场景和架构
Flink的应用场景 Flink项目的理念就是:Flink是为分布式,高性能,随时可用以及准确的流处理应用程序打造的开源流处理框架.自2019年开源以来,迅速成为大数据实时计算领域炙手可热的技术框架. ...
- 七夕节表白3d相册制作(html5+css3)
七夕节表白3d相册制作 涉及知识点 定位 阴影 3d转换 动画 主要思路: 通过定位将所有照片叠在一起,在设置默认的样式以及照片的布局,最后通过设置盒子以及照片的旋转动画来达到效果. 代码如下: &l ...
- git提交限制后提交出错的暴力解决 (使用小乌龟)
1.右键-> TortoiseGit-> 显示日志 2.右键->重置到哪个版本 3. 重新修改提交信息提交
- selenium定位方法(一)
selenium定位方法-(一) 1.定位页面元素的方式(By类的方法) 1)id定位:通过页面元素的id属性值来定位一个页面元素 注意事项:如果每次刷新网页之后元素的id属性值都不同,说 ...