【问题标题】:Python equivalent to JS `Symbol`?Python 等价于 JS `Symbol`?
【发布时间】:2020-06-27 00:02:50
【问题描述】:

Javascript symbols 提供简单的唯一标识符:

> const foo1 = Symbol('foo');
> foo1
Symbol(foo)
> const foo2 = Symbol('foo');
> foo1 === foo2
false
> let m = new Map();
> m.set(foo1, "bar");
> m.set(foo2, "rosco");
> m.get(foo1)
'bar'
> m.get(foo2)
'rosco'

这对于例如当您不能使用 Exceptions 时,具有特殊含义的函数具有唯一的返回值。

我知道在 python 中你可以使用object()nonce,但是当你打印它们时它们都不会很好。

在 python 中有没有类似 javascript 的 Symbol 的东西?

【问题讨论】:

    标签: javascript python symbols uniqueidentifier nonce


    【解决方案1】:

    已编辑:

    这个类模仿了javascript对应物。

    与 js 不同,Python 接受对象的实例作为字典键;此代码只是在打印符号时添加适当的表示。

    class Symbol:
        def __init__(self, name=''):
            self.name = f"Symbol({name})"
        def __repr__(self):
            return self.name
    
    # === test ===
    
    foo1 = Symbol('foo')
    print(foo1)
    foo2 = Symbol('foo')
    print(foo1 == foo2)
    m = {}
    m[foo1] = "bar"
    m[foo2] = "rosco"
    
    print(m[foo1])
    print(m[foo2])
    
    > Symbol(foo)
    > False
    > bar
    > rosco
    

    【讨论】:

    • 在stackoverflow上回答时,一般需要给出解释。请解释你在这里尝试了什么。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    • 2019-10-12
    • 2010-10-12
    • 2012-08-16
    • 2011-02-04
    • 2011-02-11
    相关资源
    最近更新 更多