Skip to content

Instantly share code, notes, and snippets.

@grubberr
Created November 2, 2023 18:21
Show Gist options
  • Save grubberr/441bdfdd811d98add6f8ffbcdff5ad4d to your computer and use it in GitHub Desktop.
Save grubberr/441bdfdd811d98add6f8ffbcdff5ad4d to your computer and use it in GitHub Desktop.
class_get_attr_name_as_string.py
#!/usr/bin/env python3
class cstr(str):
"""to avoid string to be 'interned'"""
class Meta(type):
def __new__(cls, name, bases, attrs):
for k, v in attrs.items():
if not k.startswith("__") and type(v) == str:
attrs[k] = cstr(v)
return super().__new__(cls, name, bases, attrs)
class BaseError(metaclass=Meta):
@staticmethod
def _get_key_value(x):
for k, v in ERROR.__dict__.items():
if v is x:
return k.lower()
class ERROR(BaseError):
USER_NOT_FOUND = "the-same-value"
PROVIDER_NOT_FOUND = "the-same-value"
assert ERROR._get_key_value(ERROR.USER_NOT_FOUND) == "user_not_found"
assert ERROR._get_key_value(ERROR.PROVIDER_NOT_FOUND) == "provider_not_found"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment