Computed static property in python
If you want it computed at class definition time, see chepner's answer - although I would recommend just to use a module level function instead.
If you want it lazily evaluated, per instance, then you might be interested in functools.cached_property
.
>>> from random import random
>>> from functools import cached_property
>>> class Foo(object):
... @cached_property
... def one_off_thing(self):
... print("computing...")
... return random()
...
>>> foo = Foo()
>>> foo.one_off_thing
computing...
0.5804382038855782
>>> foo.one_off_thing
0.5804382038855782
Note: stdlib functools.cached_property
requires Python 3.8+, for Python < 3.8 you can pip install cached_property
.
Until the class is actually created, one_off_static_method
is just a regular function. It needs to be defined before you attempt to call it, since you want to call it while the class
statement is being executed. Once you are done with it, you can simply delete it.
class Foo:
def _one_off_static_method():
return 'bar'
static_prop = _one_off_static_method()
del _one_off_static_method