输出对象列表时,如何为对象返回 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类型是否可行?
答案 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")