read

In the last post, I blogged about how you should write Getter/Setter for member variables.

This is a follow-up for static variables, instead of instance variables.

I didn’t know the answer to that, until I searched around Stackoverflow. There are a couple of ways around using @property on classmethods.

The best answer for me is this:

class MyClass(object):
    _foo = 5
    class __metaclass__(type):
        @property
        def foo(cls):
                return cls._foo
        
        @foo.setter
        def foo(cls, value):
                cls._foo = value

It uses __metaclass__, some kind of black magic in Python.

With that, you can use the getter/setter on the static variable.

>>> MyClass.foo
5
>>> MyClass.foo = 3
>>> MyClass.foo
3

Image

@samwize

¯\_(ツ)_/¯

Back to Home