【Python】Staticmethod和classmethod的区别
来源:互联网 发布:淘宝网天猫女鞋 编辑:程序博客网 时间:2024/05/17 00:50
classmethod: 类方法
staticmethod:静态方法
基本上和一个全局函数差不多,只不过可以通过类或类的实例对象(python里说光说对象总是容易产生混淆,
因为什么都是对象,包括类,而实际上类实例对象才是对应静态语言中所谓对象的东西)来调用而已,
不会隐式地传入任何参数。这个和静态语言中的静态方法比较像。
classmethod
是和一个class相关的方法,可以通过类或类实例调用,并将该class对象(不是class的实例对象)隐式地
当作第一个参数传入。就这种方法可能会比较奇怪一点,不过只要你搞清楚了python里class也是个真实地
存在于内存中的对象,而不是静态语言中只存在于编译期间的类型,就好办了。
正常的方法就是和一个类的实例对象相关的方法,只能通过类实例对象进行调用,并将该实例对象隐式地作为第一个参数传入,这个也和其它语言比较像。
区别:类方法需要额外的类变量cls,当有子类继承时,调用类方法传入的类变量cls是子类,而不是父类。类方法和静态方法都可以通过类对象和类的 实例对象访问。
看例子
class B(object): @classmethod def cm(cls): print("类方法调用者: ", cls.__name__) @staticmethod def sm(): print("静态方法sm()被调用")class C(B): passB.cm()C.cm()B.sm()C.sm()输出:
类方法调用者: B 类方法调用者: C #C继承自B, 传给cls的变量是C静态方法sm()被调用静态方法sm()被调用
再看:
class A(): @staticmethod def staticm(): print("static") def normalm(self): print("normal", self) @classmethod def classm(cls): print("class", cls)a1 = A()print(a1.normalm())print(a1.staticm())print(a1.classm())print(type(A))print(type(a1))
输出:
normal <__main__.A object at 0x022A1C90>
None
static
None
class <class '__main__.A'>
None
<class 'type'>
<class '__main__.A'>
0 0
- 【Python】Staticmethod和classmethod的区别
- python中staticmethod和classmethod的区别
- Python的classmethod和staticmethod区别
- python中classmethod和staticmethod的区别
- python中staticmethod和classmethod的区别
- Python @classmethod和@staticmethod区别
- staticmethod和classmethod的区别
- python的staticmethod和classmethod
- python的@classmethod和@staticmethod
- Python中@staticmethod和@classmethod的区别和用法
- Python: classmethod & staticmethod 区别
- Python: classmethod & staticmethod 区别
- Python: classmethod & staticmethod 区别
- python @staticmethod @classmethod 区别
- 飘逸的python - @staticmethod和@classmethod的作用与区别
- python的 @staticmethod,@classmethod和@property的区别
- Python中classmethod, staticmethod和普通method的区别
- python 中 @classmethod 、staticmethod 和 普通方法 的区别
- MacBook Pro 安装了flash Player,还是不能看优酷土豆视频
- openstack学习之RPC服务实现分析
- C# - .net framework和CLR各版本之间的关系
- Netra基于Rdk平台的软件框架设计
- DP:珍惜现在,感恩生活
- 【Python】Staticmethod和classmethod的区别
- 关于独立这件事
- 黑马程序员 面向对象---01
- Linux /dev目录详解和Linux系统各个目录的作用
- 理解fastcgi在nginx服务器下的通讯方式
- Linux内核ARM构架中原子变量的底层实现研究
- android线程
- 贪心:老人是真的饿了
- JSP页面间传值el表达式