I was asked during an interview what is the difference between the following two ways to access a class’ attribute:
class Klass:
    x = 10
    @staticmethod
    def foo():
        return Klass.x
    @classmethod
    def bar(cls):
        return cls.x
PS: I know the difference between classmethod and staticmethod.
Advertisement
Answer
Using cls would also work with inheritance,
class Klass2(Klass): x = 5 print(Klass2().foo()) 10 print(Klass2().bar()) 5
Though there might be more differences