简述python中类方法和静态方法,python的类方法,静态方法,实例方法
python的实例方法、静态方法和类方法的区别及其应用场景
一、先看语法,python 类语法中有三种方法,实例方法,静态方法,类方法。
ps.python中self和cls的区别
对于普通的实例方法,第一个参数需要是self,表示一个具体的实例本身。
如果使用staticmethod,可以忽略这个self,把这个方法当做普通函数使用。
至于classmethod,它的第一个参数是cls而不是self,表示类本身。
# coding:utf-8 class Foo(object): class three methods语法形式 def instance_method(self): print(是class {}的实例方法,只能由实例对象调用。format(Foo))@ static method def static _ method():print(是静态方法)@ class method def class _ method(CLS):print(是类方法)Foo=Foo()o . instance _ method()Foo . static _ method()Foo . class _ method()print(-)Foo . static _ method()Foo . class _ method()运行如下
是类“__main__”的实例方法。“Foo”,它只能由实例对象调用。是静态方法还是类方法?-是静态方法还是类方法描述:
方法只能由实例对象调用。静态方法(由@staticmethod修饰的方法)和类方法(由@classmethod修饰的方法)可以被类或类的实例对象调用。
方法,默认情况下第一个参数必须传递给实例对象,常用self。
静态方法,参数不是必需的。
类时,默认情况下必须传递第一个参数,通常使用cls。
二、静态方法、类方法使用区别或者说使用场景
1、类方法用在模拟java定义多个构造函数的情况。
由于python类中只能有一个初始化方法,所以不能根据不同情况对类进行初始化。
参考Django https://docs.djangoproject.com/en/1.9/ref/models/instances/,请参阅以下代码。
# coding:utf-8 class Book(object):def _ _ init _ _(self,title):self . title=title @ class method def class _ method _ create(cls,title):Book=cls(title)return Book @ static method def static _ method _ create(title):Book=Book(title)return Book 1=Book( use instance _ method _ create Book实例)book2=Book . class _ method _ create( use class _ method _ create Book实例)3=Book . static _ method _ create( use static
Use _ method _ create book实例使用class _ method _ create book实例使用static _ method _ create book实例过程结束用退出代码0特别说明,静态方法也可以实现以上功能。当静态方法每次都要写类名时,就不方便了。2、类中静态方法方法调用静态方法和类方法调用静态方法例子。
在下面的代码中,一个静态方法调用另一个静态方法。如果调用静态方法而不是类方法,可以让cls替换类。
让代码看起来更简单。它还防止类名被修改,因此没有必要修改类定义中的原始类名。
#编码:utf-8 class Foo(object):X=1y=2 @ static method def averag(* mixes):return sum(mixes)/len(mixes)@ static method def static _ method():#调用静态方法print in static method 调用静态方法in static method return Foo . averag(Foo。x,o . y)@ classmethoddef class _ method(CLS):#在类方法中使用静态方法print 在类方法中使用静态方法 return cls.averag (cls.x,cls . y)foo=foo()print(foo . static _ method())print(foo . class
在静态方法中调用静态方法
一个
在类方法中使用静态方法。
一个
3、继承类中的区别
从下面的代码可以看出,如果子类继承了父类的方法,那么子类就覆盖了父类的静态方法,
子类的实例继承父类的static_method静态方法,调用方法,或者调用父类的方法和类属性。
子类的实例继承父类的class_method方法。当调用这个方法时,它调用子类的方法和子类的类属性。
# coding:utf-8 class Foo(object):X=1y=14 @静态方法def averag(* mixes):# 父类中的静态方法return sum(mixes)/len(mixes)@ static method def static _ method():# 父类中的静态方法打印父类中的静态方法返回averag(Foo .x,Foo .Y) @classmethod定义类方法(cls): #父类中的类方法打印父类中的类方法返回平均(cls .x,cls .y)类Son(Foo):X=3Y=5 @静态方法def averag(* mixes):# 子类中重载了父类的静态方法打印子类中重载了父类的静态方法print 666 ,mixes返回sum(mixes)/3p=Son()print p . averag(1,5)的结果print (p.averag(1,5))print p . static _ method()的结果print(p . static _ method())print p . class _ method()的结果print(p.class_method())结果如下:
p.averag(1,5)的结果
子类中重载了父类的静态方法
666 (1, 5)
2
静态方法()结果
父类中的静态方法
七
类方法()结果
父类中的类方法
子类中重载了父类的静态方法
666 (3, 5)
2
进程结束,退出代码为0
参考网址:https://转蓝。胡志。com/p/21101992
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。