【发布时间】:2016-01-16 23:54:43
【问题描述】:
我有这个代码,需要输出"The value is Bar and the name is b."
class myClass:
def __init__(self, value):
self.value = value
b = myClass("Bar")
def foo(var):
true_name = str(var)
print("The value is %s and the name is %s" % (var.value, true_name))
foo(b)
但是,这会打印出The value is Bar and the name is <__main__.myClass object at 0x000000187E979550>,这对我来说用处不大。
现在,I know the problems with trying to get the true name of a variable in Python。但是,我不需要做任何花哨的内省;我只想转换在 foo() 括号之间输入的实际字母并打印出来。
对我来说,这听起来很简单,在调试和检查我的代码时很有用,所以我可以准确地知道是什么对象做了一件事情。我的假设是否存在根本性错误,这是一个糟糕的想法?
【问题讨论】:
-
没有简单的方法可以做你想做的事。变量名不是数据,您不需要知道它们。如果您希望您的对象具有名称,请将“名称”设置为属性或其他内容。
-
你从来没有提到你是怎么打电话给
foo的。那个特定电话中的var是什么? -
@TigerhawkT3:修复!
var是b,所以foo(b) -
@TigerhawkT3:是的。我将所需的输出放在问题的顶部,以防您错过。
-
如果你想要一种人类友好的方式来输出一个值,请为其类编写一个
__str__或__repr__方法。不要将对象与其变量名混淆,它们不是一回事。一个对象可能有一个名称,但也可能没有(如foo(MyClass("Bar")))或多个名称,如a = b = MyClass("Bar"))。