Skip to content

Instantly share code, notes, and snippets.

@CNSeniorious000
Created September 5, 2023 17:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save CNSeniorious000/df96593dad6ea6c46dee3e96ce64d823 to your computer and use it in GitHub Desktop.
Save CNSeniorious000/df96593dad6ea6c46dee3e96ce64d823 to your computer and use it in GitHub Desktop.
# copied from `promplate.prompt.utils`
from functools import cached_property
from inspect import currentframe
class AutoNaming:
def __new__(cls, *args, **kwargs):
obj = super().__new__(cls)
obj._bind_frame()
return obj
def _bind_frame(self) -> None:
self._frame = currentframe()
@cached_property
def _name(self):
f = self._frame
if f and f.f_back and (frame := f.f_back.f_back):
for name, var in frame.f_locals.items():
if var is self:
return name
@property
def class_name(self):
return self.__class__.__name__
fallback_name = class_name
@property
def name(self):
return self._name or self.fallback_name
@name.setter
def name(self, name):
self._name = name
self._frame = None
@name.deleter
def name(self):
del self._name
def __repr__(self):
if self._name:
return f"<{self.class_name} {self.name}>"
else:
return f"<{self.class_name}>"
def __str__(self):
return f"<{self.name}>"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment