Skip to content
Advertisement

What’s the difference between accessing a class’ attribute via the class’ name vs classmethod?

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

User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement