So of course, first thing I did was ask Google. And after a couple of weeks of checking now and again, I have been unable to find any solutions already published. I found a lot of "instances don't have names!", which clearly isn't true, but makes sense from the perspective that the instance name is a pointer to the thing, and there's no backwards pointing property in the thing being pointed at.
But as with most things, there's always a way. And it turns out that in python, it's actually pretty straightforward:
import gcdef instance_names(self):referrers = gc.get_referrers(self) result = [] dict_of_things = {} for item in referrers: if isinstance(item, dict): dict_of_things = item for k, v in dict_of_things.items(): if v == self: result.append(k) if not result: result = ['unnamed instance'] return result
Returns a list of all matching instance names. Now it's possible to create an instance without a name, such as via a generator or a lambda, and I haven't tested what it will return in those cases, as that wasn't what I needed this for. It also fails for getting the name of a function, but that can gotten in other ways.
I hope this helps someone! :)
No comments:
Post a Comment