如何返回对象列表的int类型表示

时间:2015-10-26 17:43:53

标签: python

输出对象列表时,如何为对象返回 int 类型表示?

我试过这个:

class Passport(object):
    def __init__(self, my_id):
        self.id = my_id

    def __repr__(self):
        return int(self.id)



list_of_objects = [
Passport(19181),
Passport(29191),
Passport(39191)
]

if id in list_of_objects:
    print("true")

其中list_of_objects是Passport个实例的列表。但这会产生错误__repr__ returned non-string (type int)

我可以使用字符串解决这个问题,但是我想知道int类型是否可行?

4 个答案:

答案 0 :(得分:4)

__repr__ 必需返回对象的字符串表示形式。返回其他类型不是__repr__的有效实现。

如果您想要一种方法来返回一些数字,那么添加一个自定义方法来执行该操作。

顺便说一句,请注意,实施__repr__不是让id in list_of_objects工作的方法。要实现这一点,您应该实施__hash____eq__。但在那时,你应该考虑一下你是否希望5 == Passport(5)成为真实;可能不是。因此,您应该通过明确查看id属性来更改检查的工作方式。

您可以执行以下操作,而不是if id in list_of_objects

if any(lambda x: x.id == id, list_of_objects):
    print('true')

答案 1 :(得分:1)

您可以检查对象ID的并行列表。

if any(id == pp.id for pp in list_of_objects):
    print("true")

答案 2 :(得分:1)

如您所见,

__repr__必须返回str

正确的做法是:

list_of_object_ids = [p.id for p in (Passport(19181), Passport(29191), Passport(39191))]
if id in list_of_objects:
    print("true")

答案 3 :(得分:0)

class Passport(object):
    def __init__(self, my_id):
        # It is recommended to call int here also in order to prevent
        # construction of invalid objects.
        self.id = int(my_id)

    def __int__(self):
        return int(self.id)

list_of_objects = [
Passport(19181),
Passport(29191),
Passport(39191)
]

list_of_ints = [int(passport) for passport in list_of_objects]

if id in list_of_ints:
    print("true")