如何使用python装饰器@staticmethod定义静态方法?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
其实文章标题就能说明解决方案了,完全没有必要看正文了。所以,还是先感谢点击进去读文章的你。本文讲述一个非常非常简单的python
装饰器功能,使用@staticmethod
定义一个静态方法。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的编程感想感悟。本文测试环境:win10
,python@3.22.1
。
定义静态方法
静态方法放在类里面,第一个参数不用是默认的self
(实例调用方法)或cls
(类方法)。
class Cat(object):
@staticmethod
def eat(food):
print(f"猫喜欢吃{food}")
Cat.eat("猫粮") # 猫喜欢吃猫粮
cat1 = Cat()
cat1.eat("小鱼") # 猫喜欢吃小鱼
静态方法可以通过类调用,也可以通过实例调用。
方法对比
这里就对比一下,最常见的普通实例可调用的方法。
class Cat(object):
def __init__(self,name):
self.name = name
def eat2(self,food):
print(f"{self.name}喜欢吃{food}")
def eat3(food):
print(f"猫喜欢吃{food}")
@staticmethod
def eat(food):
print(f"猫喜欢吃{food}")
cat_ = Cat("黑猫")
###### 静态方法 ######################
Cat.eat("猫粮") # 猫喜欢吃猫粮
cat_.eat("小鱼") # 猫喜欢吃小鱼
###### 实例可调用方法 #################
cat_.eat2("小鱼") # 黑猫喜欢吃小鱼
Cat.eat2(cat_,"猫条") # 黑猫喜欢吃猫条
##### 介于两者之间 ####################
Cat.eat3("猫条") # 猫喜欢吃猫条
# cat_.eat3("小鱼") # Cat.eat3() takes 1 positional argument but 2 were given
从这个例子可以看出:
在本文的python@3
测试环境里面,@staticmethod
这个规定更像是一个语法建议,没有太强的约束力的。实际的执行效果上,界定并不是那么严格。只要符合参数要求,都是可以执行的。【这就有点毁三观了】。
相关文章
结语
苏南大叔的更多python
经验文章,或复杂或简单。请点击链接:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。