温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python实例方法、静态方法与类方法源码分析

发布时间:2022-10-10 17:25:28 来源:亿速云 阅读:107 作者:iii 栏目:web开发

本篇内容介绍了“python实例方法、静态方法与类方法源码分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、引言

在学习python面向对象的路上,有很多抽象名词,如果理解不透彻很容易张冠李戴。

二、正文

在正式开始前,先构造一个关于日期的类,对于实例方法、静态方法和类方法都已经做了标注。

class Date:
    def __init__(self, year, month, day):
        self.year = year
        self.month = month
        self.day = day

	# 实例方法
        def tomorrow(self):
    	    self.day += 1

        # 静态方法 -- 判断一个日期是否有效
        @ staticmethod
        def valid_date(date_str):
       	    year, month, day = tuple(date_str.split("-"))
            conditions = [
                 int(year) > 0,
           	 0 < int(month) <= 12,
             	 0 < int(day) <= 31,  # 此处为简化问题不做讨论
        	]
       	   if all(conditions):
          	return True
           else:
           	return False

	# 类方法 -- 格式化日期
    	@classmethod
  	def parse_string(cls, date_str):
     	   year, month, day = tuple(date_str.split("-"))
     	   return cls(int(year), int(month), int(day))

1. 实例方法

实例方法其实比较好理解,首先,方法其实就是函数,也就是说实例方法是实例对象所拥有的函数功能。什么?不知道实例对象是什么?(如果对于面向对象这个问题都不太了解的可以点击此处

你可以把类想象成设计图纸,工程师可以拿着这张图纸去建造各种摩天大楼,所建造出来的摩天大楼其实就是实例对象。

此处的实例方法的作用就是日期+1

def tomorrow(self):
	self.day += 1

2.  静态方法

想象这样一个场景,有很多类似于“2018-8-29”这样格式的日期,想要通过这一个类来使用,如果在实例后每次都要手工再加上一段这样的代码:

date_str = "2018-8-29"
y, m, d = tuple(date_str.split("-"))
date = Date(int(y), int(m), int(d))

是不是觉得非常麻烦?其实对于这种情况,我们往往会把这一步骤通过静态方法来完成。

    # 静态方法 -- 格式化日期
    @staticmethod
    def parse_from_string(date_str):
        year, month, day = tuple(date_str.split("/"))
        return Date(int(year), int(month), int(day))

这样就方便了很多,但还存在一个问题,就是返回值中的Date在类名修改后这里也要随之修改,就会有些麻烦,怎么解决呢?

答案是:类方法。

如果类方法可以解决这个问题的话,那静态方法还有那些用途呢?

答案是:用于判断一些固有的属性

比如判断一个日期格式是否有效时就会使用静态方法

# 静态方法 -- 判断一个日期是否有效
@ staticmethod
def valid_date(date_str):
    year, month, day = tuple(date_str.split("-"))
    conditions = [
        int(year) > 0,
        0 < int(month) <= 12,
        0 < int(day) <= 31,  # 此处为简化问题不做讨论
    ]
    if all(conditions):
        return True
    else:
        return False

注意静态方法的写法和普通函数的写法是一样的,只是存在于类当中,并且前面加了一个装饰器@staticmethod

3. 类方法

前面提过类方法的好处,就是忽略掉修改类名带来的影响

# 类方法 -- 格式化日期
@classmethod
def parse_string(cls, date_str):
    year, month, day = tuple(date_str.split("-"))
    return cls(int(year), int(month), int(day))

注意:此处的cls是形参,只是一种代码规范。

“python实例方法、静态方法与类方法源码分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI