python中staticmethod和classmethod区

作者: 望月成三人 | 来源:发表于2020-07-12 11:42 被阅读0次

class MyClass(object):
    def __init__(self):
        self.ids = "001"

    def t1(self, path=""):
        print("这个是实例化方法")

    @staticmethod
    def get_result(path):
        print("这个是静态方法")
        MyClass().t1()  # 显示调用类的实例化方法
        print(MyClass().ids)

    @classmethod
    def get_test1(cls, path):
        print("这个是类方法")
        cls().t1()  # 调用类的实例化方法
        print(cls().ids)


MyClass().t1("调用实例化方法")
MyClass.get_result("调用静态方法")
MyClass.get_test1("调用类方法")

总结

  • 类中一般包含三种方法
    • 实例化方法(MyClass().t1()
    • 静态方法(staticmethod
      • 类方法(classmethod
  • classmethod(类方法),第一个参数必须是cls,这个cls指向了类本身,因此可以直接用cls实例化来访问类的内部方法或者属性。
    • cls().t1()
  • staticmethod(静态方法),如果要调用类的内部方法,只能显示地引用类MyClass,这对继承来说可不是一件好事情
    • MyClass().t1()

因此

  • 只要不调用类的内部方法和属性,classmethodstaticmethod都可以使用
  • 若要调用类的内部方法和属性,推荐使用classmethod

相关文章

网友评论

    本文标题:python中staticmethod和classmethod区

    本文链接:https://www.haomeiwen.com/subject/gcygcktx.html