Python中不可变对象的类型是什么(对于mypy)

时间:2018-09-29 02:43:12

标签: python python-3.x mypy

我总是在我的 Python 程序中使用typing

不可变对象的类型(来自class SliceableDict(dict): def __getitem__(self, attr:Any) -> Any: return super().__getitem__(attr) )是什么,可以用作字典键的对象?

要回到上下文中,我想编写一个从dictionary继承的类,我有以下代码

  {
    test: /\.css$/,
    use: extractCSS.extract(
    {
      fallback: 'style-loader',
      use: [{
          loader: 'css-loader',
          options: {
            modules: true,
            importLoaders: 1,
            localIdentName: '[name]__[local]___[hash:base64:5]',
          },
        },
        {
          loader: 'postcss-loader',
          options: {
            ident: 'postcss',
            plugins: () => [
              require('autoprefixer')({}),
              require('postcss-discard-empty')({}),
              require('postcss-discard-comments')({}),
              require('postcss-color-function')({}),
              require('postcss-flexbugs-fixes')({}),
              require('cssnano')({
                preset: ['default', {
                  discardComments: {
                    removeAll: true,
                  },
                  colormin: false,
                  cssDeclarationSorter: false,
                }],
              }),
            ],
          },
        },
      ],
    }),
  },

那种情况下的类型提示是没有用的,不是吗?

谢谢

2 个答案:

答案 0 :(得分:5)

dict的键是hashable(请参阅the first sentence of the docs on dict),可哈希类型是typing.Hashable,是collections.abc.Hashable的别名。

答案 1 :(得分:3)

typing.Hashable是指可以用作dict中的有效键或set中的值的任何类型。

它不是要求真正的不变性(任何对象都可以define __hash__),但是一般而言,可散列的事物应该是被“视为不变的”事物,因为它将破坏事物在插入set后或作为dict键插入后应该对其进行突变。