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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章