我有以下代码,其中info
参数可以是任何内容(str,int,list等):
class MyClass():
def __init__(self, info):
self.info = info
object_1 = MyClass("Whatever 1")
object_2 = MyClass("Whatever 2")
object_3 = MyClass("Whatever 3")
my_list = [object_1, object_2, object_3]
print(my_list)
如果你运行它,你将得到以下结果:
[<MyClass object at 0x7f**********>, <MyClass object at 0x7f**********>, <MyClass object at 0x7f**********>]
但我希望print(my_list)
打印出来:
[object_1, object_2, object_3]
有没有办法这样做,无需向__init__
函数定义添加其他参数(例如def __init__(self, info, representation):
)并定义__repr__
返回其值(例如return representation
)?
答案 0 :(得分:2)
如果您对同一个变量有多个引用,这将变得非常难以使用。你最好的办法是拥有一种跟踪类的所有哈希值的Registry类,并且只引用Registry对象,可以概括地包含__iter__
方法。
答案 1 :(得分:0)
我并不是真的建议这样做,而且我不确定如何在遇到各种复杂情况时使其变得强大,例如类和变量在不同的模块中,或者多个绑定到实例。
然而,有了各种各样的警告,只是为了好玩,这里是一个概念验证,它假设类及其实例绑定在同一个模块中
import sys
class Magic:
def __repr__(self):
module = sys.modules[self.__class__.__module__]
for name, object_ in vars(module).items():
if object_ is self:
return name
else:
return '<name not found>'
apple = Magic()
banana = Magic()
cherry = Magic()
fruit = [apple, banana, cherry]
print(fruit)
这给出了输出
[apple, banana, cherry]