Python中的staticmethod和classmethod 的异同

class MethodTest():

var1 ="class var"

def__init__(self, var2 = "object var"):

self.var2 = var2

@staticmethod

defstaticFun():

print‘static method‘

@classmethod

defclassFun(cls):

print ‘class method‘

staticmethod和classmethod的相同点:

1.都可以通过类或实例调用

mt = MethodTest()

MethodTest.staticFun()

mt.staticFun()

MethodTest.classFun()

mt.classFun()

2.都无法访问实例成员

@staticmethod

defstaticFun():

print var2  //wrong

@classmethod

defclassFun(cls):

print var2  //wrong

staticmethod和classmethod的区别:

1.staticmethod无需参数,classmethod需要类变量作为参数传递(不是类的实例)

defclassFun(cls):

print ‘class method‘  //cls作为类变量传递

2.classmethod可以访问类成员,staticmethod则不可以

@staticmethod

defstaticFun():

print var1  //wrong

@classmethod

defclassFun(cls):

print cls.var1  //right

时间: 2024-12-31 11:48:06

Python中的staticmethod和classmethod 的异同的相关文章

Python中的staticmethod和classmethod

在python中,静态方法和类方法都是可以通过类对象和类对象实例访问.但是区别是: @classmethod 是一个函数修饰符,它表示接下来的是一个类方法,而对于平常我们见到的则叫做实例方法. 类方法的第一个参数cls,而实例方法的第一个参数是self,表示该类的一个实例. 普通对象方法至少需要一个self参数,代表类对象实例 类方法有类变量cls传入,从而可以用cls做一些相关的处理.并且有子类继承时,调用该类方法时,传入的类变量cls是子类,而非父类. 对于类方法,可以通过类来调用,就像C.

【开发者笔记】python中的类方法(@classmethod)和静态方法(@staticmethod)

在java.c#等高级语言中我们用static来定义静态方法和静态变量,那么在python中如何定义静态方法和静态变量呢. python提供了@classmethod和@staticmethod来定义静态方法,刚接触的时候不太明白,Stack Overflow提供了一个比较方便理解的解释,Stack Overflow回答. 但是看完还是不太理解,于是自己写了个实例: class stclass(): d=1 #对象方法 def imethod(self): print(self) print("

python中静态方法(@staticmethod)和类方法(@classmethod)的区别

一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法. 而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用. 这有利于组织代码,把某些应该属于某个类的函数给放到那个类里去,同时有利于命名空间的整洁. 既然@staticmethod和@classmethod都可以直接类名.方法名()来调用,那他们有什么区别呢 从它们的使用上来看, @staticmethod不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样. @cla

@staticmethod与@classmethod的异同点

一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法. 而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用. 这有利于组织代码,把某些应该属于某个类的函数给放到那个类里去,同时有利于命名空间的整洁. 既然@staticmethod和@classmethod都可以直接类名.方法名()来调用,那他们有什么区别呢 从它们的使用上来看, @staticmethod不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样. @cla

知识点 - python 装饰器@staticmethod和@classmethod区别和使用

1.通常来说,我们使用一个类的方法时,首先要实例化这个类,再用实例化的类来调用其方法 class Test(object): """docstring for Test""" def __init__(self, arg=None): super(Test, self).__init__() self.arg = arg def say_hi(self): print('hello wrold') def main(): test = Test(

Python 实例方法、@staticmethod和@classmethod

Python 除了拥有实例方法外,还拥有静态方法和类方法. [python] view plain copy class Foo(object): def test(self)://定义了实例方法 print("object") @classmethod def test2(clss)://定义了类方法 print("class") @staticmethod def test3()://定义了静态方法 print("static") 实例方法访

python中staticmethod的作用

python中的staticmethod 主要是方便将外部函数集成到类体中, 美化代码结构, 重点在可以不需要类实例化的情况下调用方法 如果去掉staticmethod,在方法中加self也可以通过实例化访问方法也是可以集成代码 1. 不使用staticmethod的代码如何写的: IND = 'ON' def checkind(): return (IND== 'ON') class Kls(object): def __init__(self, data): self.data = data

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

1.形式上的异同点: 在形式上,Python中:实例方法必须有self,类方法用@classmethod装饰必须有cls,静态方法用@staticmethod装饰不必加cls或self,如下代码所示: 1 class A(object): 2 def __init__(self, name): 3 self.name = name 4 5 def get_a_object(self): 6 return "get object method:{}".format(self.name)

浅谈python中的一般方法、静态方法(staticmethod)和类方法(classmethod)

我们先来简单谈谈python类中一般方法.静态方法和类方法的区别. 1.类中的一般方法 一般方法在定义的时候,需要有表示类实例的参数(通常以self表示,例如def foo(self,arg1,arg2--)),一般方法不能通过类名.方法名()来调用,必须先创建类的实例,然后通过实例.方法名()来调用. 2.类中的静态方法 类中的静态方法用"@staticmethod"来修饰,静态方法在定义的时候,不需要表示类的实例,可想类外的方法定义一样.静态方法可以通过类名.方法名()和实例.方法