位置: 编程技术 - 正文

Python探索之静态方法和类方法的区别详解(python静态变量和静态方法)

编辑:rootadmin

推荐整理分享Python探索之静态方法和类方法的区别详解(python静态变量和静态方法),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python中的静态方法如何调用,python 静态代码分析,python 静态代码分析,python 静态代码分析,python 静态代码分析,python 静态代码分析,python静态类型检查,python静态方法的作用,内容如对您有帮助,希望把文章链接给更多的朋友!

面相对象程序设计中,类方法和静态方法是经常用到的两个术语。逻辑上讲:类方法是只能由类名调用;静态方法可以由类名或对象名进行调用。

python staticmethod and classmethod

尽管 classmethod 和 staticmethod 非常相似,但在用法上依然有一些明显的区别。classmethod 必须有一个指向 类对象 的引用作为第一个参数,而 staticmethod 可以没有任何参数。

让我们看几个例子。

例子 ? Boilerplate

Let's assume an example of a class, dealing with date information (this is what will be our boilerplate to cook on):

This class obviously could be used to store information about certain dates (without timezone information; let's assume all dates are presented in UTC).

很明显,这个类的对象可以存储日期信息(不包括时区,假设他们都存储在 UTC)。

Here we have __init__, a typical initializer of Python class instances, which receives arguments as a typical instancemethod, having the first non-optional argument (self) that holds reference to a newly created instance.

这里的 init 方法用于初始化对象的属性,它的第一个参数一定是 self,用于指向已经创建好的对象。

Class Method

We have some tasks that can be nicely done using classmethods.Let's assume that we want to create a lot of Date class instances having date information coming from outer source encoded as a string of next format (‘dd-mm-yyyy'). We have to do that in different places of our source code in project.

利用 classmethod 可以做一些很棒的东西。

Python探索之静态方法和类方法的区别详解(python静态变量和静态方法)

比如我们可以支持从特定格式的日期字符串来创建对象,它的格式是 (‘dd-mm-yyyy')。很明显,我们只能在其他地方而不是 init 方法里实现这个功能。

So what we must do here is:Parse a string to receive day, month and year as three integer variables or a 3-item tuple consisting of that variable.Instantiate Date by passing those values to initialization call.This will look like:

大概步骤:

解析字符串,得到整数 day, month, year。

使用得到的信息初始化对象

代码如下

理想的情况是 Date 类本身可以具备处理字符串时间的能力,解决了重用性问题,比如添加一个额外的方法。

For this purpose, C++ has such feature as overloading, but Python lacks that feature- so here's when classmethod applies. Lets create another “constructor”.

C++ 可以方便的使用重载来解决这个问题,但是 python 不具备类似的特性。 所以接下来我们要使用 classmethod 来帮我们实现。

Let's look more carefully at the above implementation, and review what advantages we have here:We've implemented date string parsing in one place and it's reusable now.Encapsulation works fine here (if you think that you could implement string parsing as a single function elsewhere, this solution fits OOP paradigm far better).cls is an object that holds class itself, not an instance of the class. It's pretty cool because if we inherit our Date class, all children will have from_string defined also.

让我们在仔细的分析下上面的实现,看看它的好处。

我们在一个方法中实现了功能,因此它是可重用的。 这里的封装处理的不错(如果你发现还可以在代码的任意地方添加一个不属于 Date 的函数来实现类似的功能,那很显然上面的办法更符合 OOP 规范)。 cls 是一个保存了 class 的对象(所有的一切都是对象)。 更妙的是, Date 类的衍生类都会具有 from_string 这个有用的方法。

Static methodWhat about staticmethod&#; It's pretty similar to classmethod but doesn't take any obligatory parameters (like a class method or instance method does).Let's look at the next use case.We have a date string that we want to validate somehow. This task is also logically bound to Date class we've used so far, but still doesn't require instantiation of it.Here is where staticmethod can be useful. Let's look at the next piece of code:

staticmethod 没有任何必选参数,而 classmethod 第一个参数永远是 cls, instancemethod 第一个参数永远是 self。

So, as we can see from usage of staticmethod, we don't have any access to what the class is- it's basically just a function, called syntactically like a method, but without access to the object and it's internals (fields and another methods), while classmethod does.

所以,从静态方法的使用中可以看出,我们不会访问到 class 本身 ? 它基本上只是一个函数,在语法上就像一个方法一样,但是没有访问对象和它的内部(字段和其他方法),相反 classmethod 会访问 cls, instancemethod 会访问 self。

总结

标签: python静态变量和静态方法

本文链接地址:https://www.jiuchutong.com/biancheng/368742.html 转载请保留说明!

上一篇:Python探索之爬取电商售卖信息代码示例(python爬取教程)

下一篇:Python编程之Re模块下的函数介绍(python模拟reversed功能)

  • 应付账款转资本公积
  • 购销合同印花税计税金额含税吗
  • 个人所得税 补觉
  • 生产企业出口自产的小汽车
  • 纯外贸企业出口到运费可以抵扣吗
  • 增值税有哪几类
  • 主营业务成本的数据从哪里来的
  • 教育行业主营业务内容
  • 增值税发票已抵扣能否认定合同关系
  • 调整应付账款折扣到营业外收入吗
  • 成本和费用的区别在于()
  • 国有企业改制资产评估增值税收规
  • 丢失发票罚款如何入账
  • 提供劳务收取现金会计分录
  • 用友t3固定资产计提折旧后没有凭证
  • 外派人员的一次工作总结
  • 上市公司个税手续流程
  • 简易计税是否可以开增值税专用发票
  • 外贸公司发票过期怎么办
  • 延迟抵扣的税务风险
  • 个人劳务费怎么开票
  • 本年利润有期末余额吗
  • 民间非营利组织会计制度最新版
  • 员工辞退补偿金发放逾期
  • 结转法定盈余公积会计分录怎么写
  • 小规模纳税人销售自己使用过的固定资产税率
  • 企业筹建期间购置机器设备支出计入什么科目
  • 宏病毒感染的文件类型是什么
  • 报销各种费用怎么做分录
  • 苹果手机录音转mp3怎么转
  • PHP:pg_get_pid()的用法_PostgreSQL函数
  • 应税销售额含增值税吗
  • 公司股东内部转让需要人脸识别吗
  • 试运行取得的收入如何进行财税处理
  • 城镇土地使用税纳税义务发生时间
  • 会计政策变更对财务分析的影响
  • Laravel5中Cookie的使用详解
  • 数据库防止重复数据
  • 自动驾驶感知决策控制
  • web前端三大主流框架vue
  • linuxmd5加密
  • exfat转换fat32命令
  • 月末制造费用可以有余额吗
  • 小规模纳税人企业所得税优惠政策最新2023
  • 小汽车的消费税税率按照气缸容量实行差别
  • 帝国cms自动推送插件
  • 资产处置费用是指单位经批准处置资产时发生的费用
  • 预算外财政支出
  • 免税农产品范围目录的文件
  • 工程预付税金如何计算
  • 专利财政补贴
  • 运输费用如何做账
  • 流动资产周转次数计算公式
  • 网络销售还可以叫什么
  • 汽车折旧费谁出
  • 进销项月末结转吗
  • 发现错账后进行错账更正的方式
  • 等额年金终值系数与偿债资金系数互为倒数
  • 跨月普票作废怎么处理操作步骤
  • 房地产企业发行长期债券的增信方式有哪些
  • 怎么设置库存限额
  • sqlserver获取uuid
  • sqlserver排序规则怎么看
  • mysql和mysql数据库的区别
  • sql server数据库版本
  • 向sql server数据库中导入
  • ubuntu简单的命令
  • centos7.5设置静态ip
  • linux 操作系统
  • window10 系统安装
  • win8系统如何备份系统
  • win7连接VPN时提示800错误怎么办 连接VPN时提示错误800解决方法
  • js的正则表达式
  • 如何使用jquery绑定事件
  • opengl教程48讲
  • jquery从入门到精通
  • 服务器安全设备
  • python去除文件中的空格
  • 社保ukey怎么使用
  • 税务稽查机构
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设