【问题标题】:Python - a set of one type onlyPython - 一组仅一种类型
【发布时间】:2013-08-07 08:50:05
【问题描述】:

我想在 Python 中创建一个 Set 类,但与已经在 Python 中实现的 set 类不同,我希望我的 set 只包含一种类型的元素。例如一组整数、一组字符串和一组任何其他用户定义的类。

在 Python 中有没有办法将类型作为参数传递给类?还是有其他方法?

我正在考虑使用 dict 来实现 set,但 dicts 可以包含来自不同类型的元素。

【问题讨论】:

  • 集合只是没有值的字典。您必须验证对集合的任何操作的类型;添加、交集、联合等。在初始化程序中说明它应该是什么类型只是任务的一小部分。
  • 我认为缺少静态类型会阻止这样的功能。
  • 您希望实现什么目标? Python 是动态类型的,这是一个强项。为什么要尝试删除它? array() 类型中有一个实用程序,用于存储原始类型以进行快速操作并减少内存占用,但您也希望支持自定义类型。
  • @njzk2:不,您可以锁定自定义类并将可以添加到集合中的内容限制在一定范围内,但我只是不明白您为什么要这样做。

标签: python types set


【解决方案1】:

类似的东西?

from sets import Set

class MySet(Set):

    def __init__(self, iter, klass=None):
        if klass is not None:
            for item in iter:
                if not isinstance(item, klass):
                    raise Exception("Error")
        super(MySet, self).__init__(iter) 


if __name__ == '__main__':

    set1 = MySet([1,2,3], int)
    set2 = MySet([2,3,4], int)

    print set2.intersection(set1)

如果即使在 intersection 之类的方法中也想控制类型,则应覆盖生成新 Set (self.__class__(common)) 的调用

再见

【讨论】:

    猜你喜欢
    • 2019-12-06
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 2015-03-01
    • 1970-01-01
    • 2016-09-20
    相关资源
    最近更新 更多