• @staticmethod与隐式的静态成员方法的区别在于是否允许实例对象调用该静态方法(后者是不允许的)

  • @staticmethod与@classmethod的区别在于后者无论是被实例调用还是被类对象调用传递进来的第一个参数永远是类对象(class object)

@staticmethod的用法

使用@staticmethod声明的成员函数具有C++类的静态成员函数的相同的用法,既可以被对象调用,更可以被类本身调用,因为静态成员函数属于类本身。
在python类的定义中,在成员函数的参数列表中如果不指定第一个参数为self(也即c++中的this指针),标识着该方法属于类的方法,但与@staticmethod的不同之处在于,不可被对象调用。

class Dog(object):count = 0dogs = []def __init__(self, name):self.name = nameDog.count += 1Dog.dogs.append(name)def bar(self, n):print('{} says {}'.format(self.name, 'bar'*n))def rollCall(n): # this is a implicitly a class method print('There are {} dog.'.format(Dog.count))if n >= Dog.count or n < 0:print('They are :')for dog in Dog.dogs:print(' {}'.format(dog))else:print('The dog indexed {} is {}'.format(n, Dog.dogs[n]))
if __name__ == '__main__':fido = Dog('Fido')Dog.rollCall(0)         # 正确fido.rollCall(0)        # 抛异常   

如果将rollCall()声明为@staticmethod,使用实例对象也可调用该方法。

@staticmethod与@classmethod的差异

注意区别类对象(class object)实例对象(instance object)

class Kls(object):no_inst = 0def __init__(self):Kls.no_inst += 1@classmethoddef get_no_of_instance(cls_obj):return cls_obj.no_inst
ik1 = Kls()
ik2 = Kls()
print(ik1.get_no_of_instance())         # 2
print(Kls.get_no_of_instance())         # 2

使用@classmethod成员函数的一大优势在于,无论是通过实例对象(instance object,如ik1)还是通过类对象(class object,如Kls)调用该类型方法时,传递进来的第一个参数总是该类对象(也就是将Kls传递给cls_obj)。

Python基础——@staticmethod与@classmethod相关推荐

  1. python中的classmethod_面试题:python 中 staticmethod 和 classmethod有什么区别

    面试中经常会问到staticmethod 和 classmethod有什么区别? 首先看下官方的解释: staticmethod: class staticmethod staticmethod(fu ...

  2. 【Python】@staticmethod和@classmethod的作用与区别

    前言 Python其实有3个方法,即静态方法(staticmethod),类方法(classmethod)和实例方法,一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法.而使用@static ...

  3. python中@staticmethod、@classmethod和实例方法

    1.形式上的异同点: 在形式上,Python中:实例方法必须有self,类方法用@classmethod装饰必须有cls,静态方法用@staticmethod装饰不必加cls或self,如下代码所示: ...

  4. Python中@staticmethod和@classmethod之间的区别

    @classmethod装饰器 (The @classmethod Decorator) The @classmethod decorator is an inbuilt function decor ...

  5. [Python基础] @statismethod和@classmethod中的注意事项

    声明: 以下讨论将区别方法(method)和函数(function)两个概念,方法依托于对象,而函数可以脱离对象之外存在. 众所周知,python类中的方法有是两个注解(annotation): @s ...

  6. Python中@staticmethod和@classmethod的作用和区别

    简单介绍一下两者的区别: 对于一般的函数test(x),它跟类和类的实例没有任何关系,直接调用test(x)即可 #!/usr/bin/python # -*- coding:utf-8 -*-def ...

  7. python classmethod知识_python基础知识讲解——@classmethod和@staticmethod的作用

    python基础知识讲解--@classmethod和@staticmethod的作用 在类的成员函数中,可以添加@classmethod和@staticmethod修饰符,这两者有一定的差异,简单来 ...

  8. python的staticmethod,classmethod和装饰器以及闭包的爱恨情仇

    1.这篇文章写的很好,理清了staticmethod和classmethod 2.万物皆对象,需要理清什么是对象?对象和类之间的关系.类和object之间的关系. 3.staticmethod就像是一 ...

  9. python的staticmethod,classmethod和装饰器以及闭包

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/ibelieve8013/article ...

最新文章

  1. 我放弃了年薪200万的岗位,因为“复制粘贴”的技术活让人厌恶
  2. 455. 分发饼干001(贪心算法+详解)
  3. html5中meter讲解_Java中的得墨meter耳定律–最少知识原理–实际示例
  4. linux将日期和日历信息追加到文件中_Linux任务调度
  5. c++语言将任意进制转化10进制,C++ 基础编程之十进制转换为任意进制及操作符重载...
  6. 操作系统概念第五章部分作业题答案
  7. 2018Oracle11g下载与安装菜鸟教程(二)
  8. 7天连锁酒店郑南雁:顺势创业者无为管理人
  9. python apkg_GitHub - TonyDongGuaPi/pc_wxapkg_decrypt_python: PC微信小程序 wxapkg 解密
  10. access查找出生日期年份_Access时间日期比较查询的方法总结
  11. 科目一知识点分类记忆
  12. 【收藏】林达华 概率模型与计算机视觉
  13. keystone创建服务实体HTTP500,An unexpected error prevented the server from fulfilling your request. HTTP500
  14. GitHub 官宣:弃用 trending 热榜,开发者炸锅了
  15. php判断无理数,经典证明:几乎所有有理数都是无理数的无理数次方
  16. Excel在统计分析中的应用—第十二章—回归分析与预测-应用LINEST函数进行回归分析
  17. Java微信公众平台开发(一)——接入微信公众平台
  18. 类的成员函数作为函数指针
  19. (三)市场调查大赛系列——抽样调查的误差分析和质量控制
  20. 魔兽修改默认服务器,魔兽怎么设置默认服务器

热门文章

  1. 必须包含数字和字母,字符随意的正则表达式
  2. oracle @id@,修改oracle用户id
  3. 剑指offer面试题40. 最小的k个数(sort函数)
  4. Spring Cloud 之 Eureka.
  5. 日常开发需要掌握的Maven知识
  6. HTTPS实战之单向验证和双向验证
  7. 前端性能优化之重排和重绘
  8. 【luogu P3931 SAC E#1 - 一道难题 Tree】 题解
  9. JavaWeb开发必会技巧1——导入jar包
  10. Koa框架教程,Koa框架开发指南,Koa框架中文使用手册,Koa框架中文文档