根据属性对对象进行排序,返回内存地址

珍娜

我有一个有趣的问题,我根本不明白为什么会这样。因此,我试图根据所述对象内的属性对元组列表进行排序,其中元组的第一个元素是对象。因此,我创建了以下代码来测试此功能:

class s(object):
    def __init__(self, name):
        self._name = name
    def get_name(self):
        return self._name

def val(x):
    #This used in place of a lambda
    return x[0]._name

e1 = s("Fred")
e2 = s("Bill")
print(e2.get_name())

list1 = [(e1, 3), (e2, 4)]

for n in list1:
    print(val(n))

list2 = sorted(list1, key = val)

print(list2)

print(list2[0] == e2)

print(e2.get_name)
print(e2._name)

输出为:

Bill
Fred
Bill
[(<__main__.s object at 0x0000002AC47D6438>, 4), (<__main__.s object at 0x0000002AC47D6240>, 3)]
False
<bound method s.get_name of <__main__.s object at 0x0000002AC47D6438>>
Bill

我绝对不知道为什么我在排序后将属性的内存地址作为元组的第一个元素,而且我一直在搜索SO,因此这段代码实际上应该没有任何问题,因为它看起来与与与此相关的许多其他帖子相同。任何人都可以在这里帮助我,指出为什么会这样吗?我期望这个输出:

print(list2) #After sorting
OUTPUT:
[(e2, 4), (e1, 3)]
本杰明·杰文(Benjamin Gervan)

您获得了内存地址,因为()末尾缺少。

print(e2.get_name) -> <bound method s.get_name of ...
print(e2.get_name()) -> Bill

其他q:

class s(object):
    def __init__(self, name):
        self._name = name

    def get_name(self):
        return str(self._name)

    def __repr__(self):
        return str(self._name)

 def val(x):
     #This used in place of a lambda
     return x[0]._name.lower()

 e1 = s("Fred")
 e2 = s("Bill")
 list1 = [(e1, 3), (e2, 4)]

 for n in list1:
     print(val(n))

 list2 = sorted(list1, key = val)

 print(list2[0] == e2)

出:fred bill [(Bill,4),(Fred,3)]错误

False是因为比较检查对象的元组。如果将其更改为list2[0][0] == e2,它将返回True

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章