Python中的staticmethod和classmethod】的更多相关文章

谈谈Python中的staticmethod和classmethod 首先值得说明的是staticmethod和classmethod都是python中定义的装饰器,用的时候需要在前面加@ 即@staticmethod和@classmethod 翻译过来staticmethod是静态方法, classmethod是类方法 下面是一个简单的例子: >>> v2 = "I'm out of class A" >>> class A(object): v1…
原文是stackoverflow的一则高票回答,原文链接 可能之前也有人翻译过,但是刚好自己也有疑惑,所以搬运一下,个人水平有限所以可能翻译存在误差,欢迎指正(如侵删). 尽管classmethod和staticmethod非常的相似,但是两者在具体的使用上还是有着细微的差别:classmethod必须使用类对象作为第一个参数,而staticmethod则可以不传递任何参数. 让我们通过实际的例子来看看. 样板 让我们假设有处理日期信息的类: class Date(object): day =…
一直搞不明白,类方法和静态方法的区别,特意研究了一下,跟大家分享一下. 为了方便大家了解两者的差别,以下的示例代码将有助于发现其中的差别: class A(object): def foo(self, x): print "executing foo(%s, %s)" % (self, x) @classmethod def class_foo(cls, x): print "executing class_foo(%s, %s)" % (cls, x) @stat…
python中的staticmethod 主要是方便将外部函数集成到类体中,美化代码结构,重点在不需要类实例化的情况下调用方法 如果你去掉staticmethod,在方法中加self也可以通过实例化访问方法也是可以集成代码 1)先看看不使用staticmethod的代码如何写的 2)再看看使用staticmethod的代码,用staticmethod包装的方法可以内部调用,也可以通过类访问或类实例化访问 参考链接:http://www.zhihu.com/question/20021164…
在java.c#等高级语言中我们用static来定义静态方法和静态变量,那么在python中如何定义静态方法和静态变量呢. python提供了@classmethod和@staticmethod来定义静态方法,刚接触的时候不太明白,Stack Overflow提供了一个比较方便理解的解释,Stack Overflow回答. 但是看完还是不太理解,于是自己写了个实例: class stclass(): d=1 #对象方法 def imethod(self): print(self) print("…
一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法. 而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用. 这有利于组织代码,把某些应该属于某个类的函数给放到那个类里去,同时有利于命名空间的整洁. 既然@staticmethod和@classmethod都可以直接类名.方法名()来调用,那他们有什么区别呢 从它们的使用上来看, @staticmethod不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样. @cla…
python类中有三种方法,常见的是实例方法,另外两种是staticmethod装饰的静态方法,和classmethod装饰的类方法. 1.对比 流畅的python里,用一个例子进行了对比: (1)两个方法都不依赖于实例,类可以直接调用: (2)classmethod中,第一个参数为相应的类:staticmethod不是. 2.使用场景 1.静态方法适合,在该方法中,不需要访问任何实例方法和属性,只实现传入参数.返回数据的功能: 2.类方法适合,作为工厂方法创建实例对象,需要在方法中调用静态类(…
首先明确两点: a)python在创建类的时候,self指向的是类的实例而不是类属性! b)我们所创建的类的方法有两种作用,一种是改变类的属性,一种是改变实例的属性,这点一定要分清! c)我们在调用类的一般的方法的时候,是将实例本身传递给方法! 现在我们来说一下主要的三种类的方法: 实例方法.classmethod(类方法).staticmethod(静态类方法): 简单介绍一下它们的区别: 实例方法就是我们常见的类的方法,它们是与类的实例绑定在一起,所能操作的也是实例的属性而不能操作类的属性:…
class NewsPaper(object): # 类属性 __print_times = 0 # 下划线表示私有属性 # 实例方法 def __init__(self, title, content): self.title = title # 实例属性 self.content = content # 实例属性 # 累加类属性变量 NewsPaper.__print_times += 1 # 实例方法 def show_news(self): print("报纸标题:%s" %…
staticmethod 统计实例 #!python2 #-*- coding:utf-8 -*- class c1: amount_instance=0 def __init__(self): c1.amount_instance+=1 @staticmethod def printresult(): print "Amount of Instance: " ,c1.amount_instance class sub1(c1): #此处定义没有作用,因为只会引用c1中amount_i…