我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

其实文章标题就能说明解决方案了,完全没有必要看正文了。所以,还是先感谢点击进去读文章的你。本文讲述一个非常非常简单的python装饰器功能,使用@staticmethod定义一个静态方法。

苏南大叔:如何使用python装饰器@staticmethod定义静态方法? - 装饰器定义静态方法
如何使用python装饰器@staticmethod定义静态方法?(图2-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的编程感想感悟。本文测试环境:win10python@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装饰器@staticmethod定义静态方法? - 语法建议staticmethod
如何使用python装饰器@staticmethod定义静态方法?(图2-2)

相关文章

结语

苏南大叔的更多python经验文章,或复杂或简单。请点击链接:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python