如何在Python中从self方法获取self对象名称

4

我希望能够找到一种方法,通过只使用print object就自动打印出对象引用名称。 更具体地说, 假设我有一个类:

class A:
    def __init__(self):
        self.cards = []

    def __str__(self):
        # return a string representation of A
        return "A contains " ...
    ...

现在,每当我创建一个对象时。
test = A()

如果我使用print test,会得到类似以下内容(不用在意点号)

A contains ...

我想要实现的是自动打印对象引用名称,而不是类名:
test contains ...

"self.__class__"或"self.__name__"不能使用,因为它们返回一个奇怪的字符串,如"<class '__main__.A'>"。要实现这个,应该如何实现 "__str__"方法呢?谢谢。"

1
对象没有名称,它们只有引用。 - Ashwini Chaudhary
1
你是否试图打印实例所绑定的变量标识符?如果是这样,我认为这不可能(或不明智)。考虑一个未绑定任何变量的类A的实例。那么你会打印什么呢?或者如果它绑定了两个或多个变量呢?也许你可以在构造函数中传递一个对象名称并打印它。 - dsu
你想要实现什么目标? - Daenyth
@Daenyth 好的,每次我使用 print object 只是打印它本身而不是它的类。 - BugShotGG
你为什么要尝试打印对象?你试图通过这样做达成什么目标? - Daenyth
@Daenyth 简单来说,打印出其自身的名称而不是该对象所继承的类。 这在对象列表中可能会很有用。 我之前遇到了这个问题,只想在这里问一下。 有一个答案被删除了,可能是作者改变了主意。 - BugShotGG
2个回答

2

正如您问题中的评论所述,这是不可能的,而且也是不明智的。因此,考虑采用以下方法之一:

class A:
    def __init__(self, name):
        self.cards = []
        self.name = name

    def __str__(self):
        return '{} contains ...'.format(self.name)

>>> test = A('test')
>>> print test
test contains ...

>>> a = A('hello')
>>> print a
hello contains ...

谢谢回复。那正是我想避免的,即在实例化时传递引用名称。如果这是唯一的解决方案,那么我猜我所问的不可能实现 :| - BugShotGG

1

我知道我回复得太晚了,但如果有人像我一样偶然来到这里,这就是解决方案:

type(self).__name__

你的实现将是:

class A:
    def __init__(self, name):
        self.cards = []
        self.name = name

    def __str__(self):
        return '{} contains...'.format(type(self).__name__)
a=A('test')
print(a)
# A contains ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接