#!/usr/bin/env python
# coding: utf-8
# In[1]:
import sys
print(sys.version)
# In[2]:
from time import sleep
from abc import ABC, ABCMeta, abstractmethod
def compute(obj, s):
print(f"Computing {s} of {obj} ...", end="")
sleep(3)
print("DONE!")
return "Phew, that was a lot of work!"
class MyMetaClass(ABCMeta):
@property
def expensive_metaclass_property(cls):
"""This may take a while to compute!"""
return compute(cls, "metaclass property")
class MyBaseClass(ABC, metaclass=MyMetaClass):
@classmethod
@property
def expensive_class_property(cls):
"""This may take a while to compute!"""
return compute(cls, "class property")
@property
def expensive_instance_property(self):
"""This may take a while to compute!"""
return compute(self, "instance property")
class MyClass(MyBaseClass):
"""Some subclass of MyBaseClass"""
help(MyClass)