首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从键入扩展FrozenSet

从键入扩展FrozenSet
EN

Stack Overflow用户
提问于 2020-05-30 13:20:56
回答 1查看 182关注 0票数 2

我可能是在做傻事。对于想要复制和粘贴的人,请确保:

代码语言:javascript
复制
from typing import *

我正在使用Python3.7.4。

这是:

代码语言:javascript
复制
class S(FrozenSet[str]):
    def __init__(self, strs: Iterable[str], name: str):
            super().__init__(strs)
            self.name = name

S(['a'], 'a')

引发错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: S expected at most 1 arguments, got 2

,但这个:

代码语言:javascript
复制
class S(Set[str]):
    def __init__(self, strs: Iterable[str], name: str):
            super().__init__(strs)
            self.name = name

S(['a'], 'a')

产出很好:

代码语言:javascript
复制
S({'a'})

我想要一个集的额外功能,但我不希望我的用户改变它。

编辑:我知道我可以使用组合而不是继承,但是如果我也能让它工作的话,那就太好了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-30 14:00:23

因为它是一个冻结集,一旦创建,您就不能修改它的内容。

因此,我认为您应该重写__new__

代码语言:javascript
复制
class S(FrozenSet[str]):
    def __new__(cls, strs: Iterable[str], name: str):
        return super(S, cls).__new__(cls, strs)

    def __init__(self, strs: Iterable[str], name: str):
        self.name = name
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62103042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档