python类方法与静态方法
python类里面的实例方法我是很常用的,这个类方法和静态方法不怎么常用。所以有必要记录一下:
静态方法,使用@staticmethod修饰;
类方法,使用@classmethod修饰。
实例方法
定义:第一个参数必须是实例对象,参数名约定为“self”(当然,这个是可以改变的,但还是要self好点),通过它来传递实例的属性和方法(也可以传类的属性和方法);
调用:在类外部,原则上由实例对象调用。
类方法
定义:使用装饰器@classmethod。第一个参数必须是当前类对象,参数名约定为“cls”,通过它来传递类的属性和方法,原则上不传实例的属性和方法【但想传也是可以的】;
调用:实例对象和类对象都可以调用。
静态方法
定义:使用装饰器@staticmethod。参数随意,没有“self”和“cls”参数,原则上静态方法体中不使用类或实例的任何属性和方法,但本质上是可以调用的;
调用:实例对象和类对象都可以调用。
至于以上为什么要加个原则上,因为python不是java,没有java那么安全的类对象管理机制,也可以说成python的类对象机制比较的开放吧。下面这个例子是一个很好的诠释:
当然,最好遵守上面的那些原则上的原则。
class Foo: classname = "Foo" def __init__(self,name): self.name = name def f1(self): print(self.name) @staticmethod def f2(): print("static and",Foo.classname) @classmethod def f3(cls): cls.f1(f) print(cls.classname) if __name__ == '__main__': f = Foo("李") f.f1() f.f2() f.f3() print("----------") Foo.f1(f) Foo.f2() Foo.f3()