python @staticmethod和@classmethod
Python其实有3个方法,即
静态方法 (staticmethod),
类方法 (classmethod)和
实例方法。
如下:
def foo(x):
print "executing foo(%s)"%(x)
class A(object):
def foo(self,x): # 实例方法 self传递实例
print "executing foo(%s,%s)"%(self,x)
@classmethod # 类方法 cls传递类
def class_foo(cls, x):
print "executing class_foo(%s,%s)"%(cls, x)
@staticmethod # 静态方法 不用实例化可以用类名调用
def static_foo(x):
print "executing static_foo(%s)"%x
a = A()
这里先理解下函数参数里面的 self 和 cls. 这个 self 和 cls 是对类或者实例的绑定 ,
对于一般的函数来说我们可以这么调用 foo(x), 这个函数就是最常用的 , 它的工作跟任何东西 ( 类 , 实例) 无关。
实例方法
对于实例方法 , 我们知道在类里每次定义方法的时候都需要绑定这个实例 self, 就是 foo(self, x), 为什么要这么做呢 ?
因为实例方法的调用离不开实例 , 我们需要把实例自己传给函数 , 调用的时候
py a.foo(x) # 其实是 foo(a, x)
类方法
类方法一样 , 只不过它 传递的是类 而不是实例 , A.class_ foo(x). 注意这里的 self 和 cls 可以替换别的参数 , 但是 python 的约定是这俩, 还是不要改的好 .
静态方法
静态方法其实和普通的方法一样,不需要对谁进行绑定,
唯一的区别是调用的时候可以使用a.static_foo(x)或者A.static_foo(x)来调用.
即,不用实例化也可以直接用类名调用
实例化:a = A() |
实例方法 | 类方法 | 静态方法 |
|---|---|---|---|
实例a |
a.foo(x) |
a.class_foo(x) |
a.static_foo(x) |
类 A |
不可用 | A.class_foo(x) |
A.static_foo(x) |
非原创,但是忘记了出处,如果有人知道或者原作看到麻烦提醒一下我加上,侵删。
python @staticmethod和@classmethod的更多相关文章
- python @staticmethod和@classmethod的作用
一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法. 而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用. 这有利于组织代码,把某些应 ...
- 飘逸的python - @staticmethod和@classmethod的作用与区别
一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法. 而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用. 这有利于组织代码,把某些应 ...
- python staticmethod和classmethod(转载)
staticmethod, classmethod 分别被称为静态方法和类方法. staticmethod 基本上和一个全局函数差不多,只不过可以通过类或类的实例对象(python里只说对象总是容易产 ...
- python staticmethod and classmethod方法
静态方法无绑定,和普通函数使用方法一样,只是需要通过类或者实例来调用.没有隐性参数. 实例方法针对的是实例,类方法针对的是类,他们都可以继承和重新定义,而静态方法则不能继承,可以认为是全局函数. #h ...
- Python语言特性之3:@staticmethod和@classmethod
问题:Python中@staticmethod和@classmethod两种装饰器装饰的函数有什么不同? 原地址:http://stackoverflow.com/questions/136097/w ...
- 【python】Python 中的 classmethod 和 staticmethod
Python 中的 classmethod 和 staticmethod 有什么具体用途? 推荐地址:http://www.cnblogs.com/wangyongsong/p/6750454.htm ...
- Python staticmethod classmethod 普通方法 类变量 实例变量 cls self 概念与区别
类变量 1.需要在一个类的各个对象间交互,即需要一个数据对象为整个类而非某个对象服务. 2.同时又力求不破坏类的封装性,即要求此成员隐藏在类的内部,对外不可见. 3.有独立的存储区,属于整个类. ...
- python中@staticmethod与@classmethod
@ 首先这里介绍一下‘@’的作用,‘@’用作函数的修饰符,是python2.4新增的功能,修饰符必须出现在函数定义前一行,不允许和函数定义在同一行.只可以对模块或者类定义的函数进行修饰,不允许修饰一个 ...
- python 之@staticmethod和@classmethod
在python中,要调用一个类中的方法,一般的操作步骤如下: 1.实例化此类 2.调用此类中的方法 而@staticmethod和@classmethod则打破了这种引用方式,可以在不实例化类的情况下 ...
随机推荐
- IT兄弟连 JavaWeb教程 经典案例
案例需求:编写一个jsp servlet程序,在login.jsp发起login.do登录请求,当输入的用户名是abc密码是123时,则判断是登录成功,其它暂时认为是登录失败.当用户登录成功时,将用户 ...
- 搭建Windows IIS(Internet Information Server)服务器
1.找到 控制面板\程序 点击 “打开或关闭Windows功能” ,全部选上“Internet信息服务”,这里可能要等几分钟. 2.完成之后你打开C盘,在他的根目录下多出一个inetpub文件夹里面有 ...
- 联盟链FISCO BCOS权限控制一览
FISCO BCOS是完全开源的联盟区块链底层技术平台,由金融区块链合作联盟(深圳)(简称金链盟)成立开源工作组通力打造.开源工作组成员包括博彦科技.华为.深证通.神州数码.四方精创.腾讯.微众银行. ...
- 第九组 通信3班 063 OSPFv2与OSPFv3综合实验
实验目的 1. 掌握 OSPFv3(v2) 的配置方法 2. 掌握在帧中继环境下 OSPFv3 (v2)的配置方法 3. 掌握 OSPFv3(v2) NSSA 的配置方法 4. 掌握外部路由汇总的配置 ...
- Django中间件的执行流程
Django中间件的执行流程. 请求到达中间件之后,先按照正序执行每个注册中间件的process_reques方法,process_request方法返回的值是None,就依次执行, 如果返回的值是H ...
- Codeforces Round #527-B. Teams Forming(贪心)
time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...
- 从wireshake分析http和https的通信过程
参考文章: Wireshark基本介绍和学习TCP三次握手 [技术流]Wireshark对HTTPS数据的解密 Wireshark/HTTPS Journey to HTTP/2 以TCP/IP协议为 ...
- 《深入理解java虚拟机》笔记(2)HotSpot虚拟机对象探秘
一.对象的创建 1.类加载: 虚拟机在遇到一条new指令时候,检查类是否已被加载.解析.初始化过,如果没有,则执行类加载过程. 2.分配内存:类加载完成后,则为新对象从java堆上分配内存,分配内存有 ...
- sql常用操作(三)多表查询
1 连接查询 1.1连接就是指两个或2个以上的表(数据源)“连接起来成为一个数据源”. 实际上,两个表的完全的连接是这样的一个过程: 左边的表的每一行,跟右边的表的每一行,两两互相“横向对接”后所得到 ...
- 记录:swift学习笔记1-2
swift还在不断的更新做细微的调整,都说早起的鸟儿有虫吃,那么我们早点出发吧,趁着国内绝大多数的coder们还没有开始大范围普遍应用. 网上有些大神说:swift很简单!我不同意这个观点,假如你用h ...