【python】静态函数与类方法

正文

静态函数与类方法

静态函数其实和类的方法没什么关系,它只是恰好定义在类的内部而已,所以这里我用函数(function) 来形容它。它可以没有参数:

class Person:
    @staticmethod   # 用 staticmethod 这个修饰器来表明函数是静态的
    def sayHello():
        print('Hello')

Person.sayHello() # 输出 'Hello`

静态函数的调用方式是类名加上函数名。类方法的调用方式也是这样,唯一的不同是需要用 @staticmethod 修饰器,而且方法的第一个参数必须是类:

class Person:
    @classmethod    # 用 classmethod 这个修饰器来表明这是一个类方法
    def sayHi(cls):
        print('Hi: ' + cls.__name__)

Person.sayHi() # 输出 'Hi: Person`

 

# 在 module1.py 文件中:
def global():
    pass 

class Util:
    @staticmethod
    def helper():
        pass

# 在 module2.py 文件中:
import module1
module1.global()        # 调用全局函数
module1.Util.helper()   # 调用静态函数

 

class Data_test2(object):
    day=0
    month=0
    year=0
    def __init__(self,year=0,month=0,day=0):
        self.day=day
        self.month=month
        self.year=year

    @classmethod
    def get_date(cls, string_date):
        #这里第一个参数是cls, 表示调用当前的类名
        year,month,day=map(int,string_date.split('-'))
        date1=cls(year,month,day)
        #返回的是一个初始化后的类
        return date1

    def out_date(self):
        print "year :"
        print self.year
        print "month :"
        print self.month
        print "day :"
        print self.day

参考资料

1. 静态函数与类方法

2. python @classmethod 的使用场合

类方法和静态函数的调用方法一致,在定义时除了修饰器不一样,唯一的区别就是类方法需要多声明一个参数。这样看起来比较麻烦,但静态函数无法引用到类对象,自然就无法访问类的任何属性。
于是问题来了,静态函数有何意义呢?有的人说类名可以提供命名空间的概念,但在我看来这种解释并不成立,因为每个 Python 文件都可以作为模块被别的模块引用,把静态函数从类里抽取出来,定义成全局函数,也是有命名空间的:
 

 

 
 
posted @   苏格拉底的落泪  阅读(172)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2022-12-07 【linux编程】gethostname、gethostbyname 函数解析
2022-12-07 【linux命令】通过nginx搭建局域网yum源
2021-12-07 读的
2021-12-07 【工具】ceph-bluestore-tool
点击右上角即可分享
微信分享提示