Files
example-code-2e/24-class-metaprog/autoconst/autoconst.py
2021-09-10 12:34:39 -03:00

23 lines
578 B
Python

# tag::WilyDict[]
class WilyDict(dict):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.__next_value = 0
def __missing__(self, key):
if key.startswith('__') and key.endswith('__'):
raise KeyError(key)
self[key] = value = self.__next_value
self.__next_value += 1
return value
# end::WilyDict[]
# tag::AUTOCONST[]
class AutoConstMeta(type):
def __prepare__(name, bases, **kwargs):
return WilyDict()
class AutoConst(metaclass=AutoConstMeta):
pass
# end::AUTOCONST[]