今天被问了这么个问题 python为什么要有classmethod?

被问倒了,只能回答:classmethod不需要实例化类,用起来比较方便。这么回答没有什么底细,于是查看了一下python的官方文档:

Class method objectsA class method object, like a static method object, is a wrapper around another object that alters the way in which that object is retrieved from classes and class instances. The behaviour of class method objects upon such retrieval is described above, under “User-defined methods”. Class method objects are created by the built-in classmethod() constructor.

https://docs.python.org/2/reference/datamodel.html#types

感觉也是语焉不详。那在什么场合用它呢?它和staticmethod有什么不同呢?

我一般用它的时候就是为了方便,跟在java里用静态方法一样,这样到底对么?google了一些答案,其中stackoverflow里的一个答案给出了一些思路:

1.类似静态类的使用方法是对的。classmethod调用前必须加上class名字,这样更有面向对象思想。

2.弥补了python不支持构造函数重载的不足,如果想从某种程度上实现构造函数重载,可以使用classmethod方法。这样直接调用这个方法,可以完成构造函数的的工作。

对于第二点,我不是全挺赞同,构造函数不就是为了省事儿,在类被实例化的时候被调用的函数么?这样其实没有省多少事儿,只是把程序从2行变成了一行。

看来还是我最早的认识靠点儿谱。

python为什么用class_python为什么会有@classmethod?相关推荐

  1. python怎么调用class_python怎么调用class

    Python类方法和静态方法都可以被类和类实例调用,类实例方法仅可以被类实例调用.类方法的隐含调用参数是类,而类实例方法的隐 含调用参数是类的实例,静态方法没有隐含调用参数. 要想调用类中的方法,首先 ...

  2. python import from class_Python: import vs from (module) import function(class) 的理解

    Python: Import vs From (module) import function(class) 本文涉及的 Python 基本概念: Module Class import from . ...

  3. python中@staticmethod_Python中的@staticmethod和@classmethod的区别

    一直搞不明白,类方法和静态方法的区别,特意研究了一下,跟大家分享一下. 为了方便大家了解两者的差别,以下的示例代码将有助于发现其中的差别: class A(object): def foo(self, ...

  4. python装饰器class_Python中的各种装饰器详解

    Python装饰器,分两部分,一是装饰器本身的定义,一是被装饰器对象的定义. 一.函数式装饰器:装饰器本身是一个函数. 1.装饰函数:被装饰对象是一个函数 [1]装饰器无参数: a.被装饰对象无参数: ...

  5. python装饰器class_PYTHON里的装饰器能装饰类吗

    展开全部 Python 装饰2113器装饰类中的方法 目前在中文网上能5261搜索到的绝大部分关于4102装饰器的教程,都在讲如何装饰一个1653普通的函数.本文介绍如何使用Python的装饰器装饰一 ...

  6. python编译成class_python class

    def test(self): print "Base2 test..." >>> class Class1(Base2, Base1): def __init_ ...

  7. python里的class_Python中的Class的讨论

    你的例子是错误的,python不支持函数重载.后定义的函数会直接覆盖之前定义的同名函数. 想要实现类似你例子的效果,应该这样: class MyClass(BaseClassA, BaseClassB ...

  8. python装饰器class_Python装饰器dataclass详解

    引言 Dataclasses 是一些适合于存储数据对象(data object)的 Python类.你可能会问,什么是数据对象?下面是一个并不详尽的用于定义数据对象的特征列表: 他们存储并表示特定的数 ...

  9. python静态方法的作用_@staticmethod和@classmethod如何作用于python中的...

    您的类方法和静态方法都只能更改类级变量.问题是这样做时,您已经在实例变量s1中隐藏了类变量num: s1.num = s1.num + 5 这将创建一个实例变量,该实例变量遮盖了实例名称空间中的类变量 ...

最新文章

  1. Java并发学习一:CPU缓存导致的可见性问题带来的并发Bug
  2. 节流与防抖【从0到0.1】
  3. Java线程池的拒绝策略
  4. 7-1 装载问题 (10 分)(思路+详解)
  5. 迪士尼自研算法突破百万高清像素用AI换脸来拍电影
  6. 文言文能编程了,是噱头还是突破?
  7. 工程之道,解读业界最佳的深度学习推理性能优化方案
  8. android 横向stepview,一款由Recyclerview打造的步骤控件,支持横向和纵向
  9. ASP.NET服务器控件查询
  10. iptables 之 REJECT 与 DROP 对比
  11. cassini服务器源代码
  12. katakana.php,片假名 平假名转换器 - Hi!Penpal!
  13. 【老生谈算法】matlab实现萤火虫算法源码——萤火虫算法
  14. 网络七层模型及各层协议
  15. 共享计算机如何重新登录密码,电脑共享后怎么登陆密码怎样设置
  16. 第19课:生活中的访问模式——一千个读者一千个哈姆雷特
  17. 剖析微商到微伤的全过程
  18. 通过opencv标记图片以及写入Excel小方法
  19. 封装自己的js库(二)---仿照JQuery
  20. DNS中的A记录和CNAME记录的区别

热门文章

  1. 非常实用的设计类导航
  2. UI实用素材|电商购物类APP界面设计原则!
  3. Windows下根据进程id获得进程名
  4. 中断描述符表描述符:任务门,中断门,陷阱门(调用门)
  5. Linux内核跟踪eBPF:bpftrace一行教程
  6. The Vector Packet Processor (VPP)的安装
  7. mybatis ------ 逆向工程(十)
  8. 面试pythone_Python面试考题
  9. python画中秋的月亮_水彩中秋月亮教程
  10. python函数传值还是地址_python中给函数传参是传值还是传引用