python的类方法和静态方法有什么区别

python的类方法可以访问类属性, 静态方法既不能访问类属性也不能访问实例属性, 实例方法既可以访问类属性也可以访问实例属性,但是要注意,实例方法不能修改类属性, 先看一段代码,来了解什么是类方法和静态方法

class Student:
    school_name = '四中'
    def __init__(self, name, age):
        self.name = name
        self.age = age

    @classmethod
    def go_to_school(cls):
        msg = "去{school}上学".format(school=cls.school_name)
        print(msg)

    @staticmethod
    def sing():
        print("唱校歌")

    def run(self):
        print("{name}正在跑".format(name=self.name))

stu = Student('小明', 14)
stu.go_to_school()
stu.run()
stu.sing()

在这段代码里,我定义了一个Student类,这里面:

  1. 被classmethod装饰的就是类方法
  2. 被staticmethod装饰的就是静态方法
  3. run没有被任何装饰器装饰,是实例方法

类方法可以访问类属性,在代码中,go_to_school方法传入了参数cls,可以访问类属性school_name,但不能访问实例属性。

静态方法既不能访问类属性也不能访问实例属性。

而实例方法既可以访问类属性也可以访问实例属性,但是要注意,实例方法不能修改类属性。

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案