Python中的静态方法和类方法区别

1.类的方法第一个参数必须是 self并且如果要调用类的方法,必须将通过类的实例,即方法绑定实例后才能由实例调用如果不绑定,一般在继承关系的类之间,可以用 super 函数等方法调用。
2.这里再介绍一种方法,这种方法的调用方式跟上述的都不同,这就是:静态方法和类方法
看代码:

__metaclass__ = type


class StaticMethod:
    @staticmethod
    def foo():
        print("This is static method foo().")


class ClassMethod:
    @classmethod
    def bar(cls):
        print("This is class method bar()")
        print("bar() is part of class:", cls.__name__)


if __name__ == "__main__":
    static_foo = StaticMethod()   # 实例化
    static_foo.foo()              # 实例调用静态方法
    StaticMethod.foo()            # 通过类来调用静态方法
    print("*****")
    class_bar = ClassMethod()
    class_bar.bar()
    ClassMethod.bar()

运行结果:

This is static method foo().
This is static method foo().
*****
This is class method bar()
bar() is part of class: ClassMethod
This is class method bar()
bar() is part of class: ClassMethod
  1. @staticmethod 表示下面的方法是静态方法。
  2. @classmethod 表示下面的方法是类方法
  3. 先看静态方法,虽然名为静态方法,但也是方法,所以,依然用 def 语句来定义。需要注意的是文件名后面的括号内,没有 self,这和前面定义的类中的方法是不同的,也正是因着这个不同,才给它另外取了一个名字叫做静态方法,否则不就“泯然众人矣”。如果没有 self,那么也就无法访问实例变量、类和实例的属性了,因为它们都是借助 self 来传递数据的。
  4. 再看类方法,同样也具有一般方法的特点,区别也在参数上。类方法的参数也没有 self但是必须有 cls 这个参数。在类方法中,能够访问类属性,但是不能访问实例属性。
  5. 简要明确两种方法。两种方法都可以通过实例调用即绑定实例。也可以通过类来调用即 StaticMethod.foo() 这样的形式,这也是区别一般方法的地方,一般方法必须用通过绑定实例调用。

猜你喜欢

转载自blog.csdn.net/ZHUQIUSHI123/article/details/82967399