【问题标题】:Readable names for python objects as dictionary keyspython 对象的可读名称作为字典键
【发布时间】:2013-08-23 13:07:14
【问题描述】:

在 Python 中,使用自定义对象作为字典键会产生非常难以理解的输出。这是一个小例子:

class myClass(object):
    def __init__(self,foo,bar):
        self.foo = foo
        self.bar = bar

item = myClass(1,2)
myDict = {}
myDict[item] = 10 

print myDict
{<__main__.myClass object at 0x01998FD0>: 10}

如果有很多对象,该字典将变得不可读。我希望它显示对象的名称:

{'item':10}

如何做到这一点?

【问题讨论】:

    标签: python object dictionary key names


    【解决方案1】:

    为myClass定义__repr__:

    >>> class myClass(object):
    ...     def __init__(self,foo,bar):
    ...         self.foo = foo
    ...         self.bar = bar
    ...     def __repr__(self):
    ...         return 'myClass({0.foo},{0.bar})'.format(self)
    ... 
    >>> item = myClass(1,2)
    >>> item
    myClass(1,2)
    >>> myDict = {}
    >>> myDict[item] = 10
    >>> myDict
    {myClass(1,2): 10}
    

    【讨论】:

    • 或__str__ 与print 语句一起使用
    • 是的,这将是一个合理的解决方案。介意解释“0”对象的含义吗?是否也可以将其称为给定名称“项目”?
    • @Forzaa, 0 表示传递给str.format 方法的第一个参数。
    • @Forzaa,这是特殊的str 格式,您可以在此处找到更多相关信息:docs.python.org/2/library/string.html#formatstrings 示例。
    • 我的对象的输入是函数,它们再次被称为 。这意味着我还必须为每个函数创建 repr。虽然总的来说 repr 很好,但目前我认为它不是解决我的问题的最佳方法。
    猜你喜欢
    • 2018-06-12
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    相关资源
    最近更新 更多