如何在Python中确定对象的值

时间:2019-08-10 14:35:46

标签: python object expression

从文档

  

每个对象都有一个标识,一个类型和一个值。

  • type(obj)返回对象的类型
  • id(obj)返回对象的ID

是否有返回其值的东西?对象(例如用户定义的对象)的值代表什么?

3 个答案:

答案 0 :(得分:0)

对于每个Python类,都有针对不同情况执行的特殊函数。类的__str__返回被称为print(obj)str(obj)时将使用的值。

示例:

class A:

    def __init__(self):
        self.a = 5

    def __str__(self):
        return "A: {0}".format(self.a)

obj = A()

print(obj)
# Will print "A: 5"

答案 1 :(得分:0)

请注意,并非所有对象都具有__dict__属性,而且有时在对象dict(a)实际上可以解释为字典的情况下调用a会导致{的合理转换。 {1}}到本机python字典。例如,使用numpy数组:

a

但是In [41]: a = np.array([[1, 2], [3, 4]]) In [42]: dict(a) Out[42]: {1: 2, 3: 4} 没有属性a,其值为1。相反,您可以使用2hasattr动态检查对象的属性:

getattr

因此,In [43]: hasattr(a, '__dict__') Out[43]: False In [44]: hasattr(a, 'sum') Out[44]: True In [45]: getattr(a, 'sum') Out[45]: <function ndarray.sum> 没有a作为属性,但是确实有__dict__作为属性,而suma.sum

如果要查看getattr(a, 'sum')具有的所有属性,可以使用a

dir

(由于numpy数组很多,我只显示了前5个属性。)

答案 2 :(得分:0)

要真正查看对象的值/属性,应使用magic method __dict__

这是一个简单的示例:

class My:
    def __init__(self, x):
        self.x = x
        self.pow2_x = x ** 2

a = My(10)
# print is not helpful as you can see 
print(a) 
# output: <__main__.My object at 0x7fa5c842db00>

print(a.__dict__.values())
# output: dict_values([10, 100])

或者您可以使用:

print(a.__dict__.items())
# output: dict_items([('x', 10), ('pow2_x', 100)])