您基本上是在问“我的代码如何发现对象的名称?”
def animal_name(animal):
# here be dragons
return some_string
cat = 5
print(animal_name(cat)) # prints "cat"
来自 Fredrik Lundh 的 quote(在 comp.lang.python 上)特别适合这里。
与您在门廊上找到那只猫的名字的方法相同:
猫(物体)本身不能告诉你它的名字,它也不
真的很在乎——所以找出它叫什么的唯一方法就是问
你所有的邻居(命名空间),如果是他们的猫(对象)……
……如果您发现它有很多名字,请不要感到惊讶,
或者根本没有名字!
只是为了好玩,我尝试使用sys 和gc 模块来实现animal_name,并发现邻居也将您亲切地称为“猫”的对象,即字面整数5,由几个名称:
>>> cat, dog, fish = 5, 3, 7
>>> animal_name(cat)
['n_sequence_fields', 'ST_GID', 'cat', 'SIGTRAP', 'n_fields', 'EIO']
>>> animal_name(dog)
['SIGQUIT', 'ST_NLINK', 'n_unnamed_fields', 'dog', '_abc_negative_cache_version', 'ESRCH']
>>> animal_name(fish)
['E2BIG', '__plen', 'fish', 'ST_ATIME', '__egginsert', '_abc_negative_cache_version', 'SIGBUS', 'S_IRWXO']
对于足够独特的对象,有时您可以获得一个唯一的名称:
>>> mantis_shrimp = 696969; animal_name(mantis_shrimp)
['mantis_shrimp']
所以,总结一下: