栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

覆盖Python中的set方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

覆盖Python中的set方法

collections
正如@ kaizer.se所建议的那样,从的抽象类进行工作是2.6中的适当解决方案(不确定为什么要调用super-
您试图委托哪种功能最好通过包含约束而不是继承来完成? !)。

的确,您不会得到

update
-通过提供抽象方法,您确实获得了
__le__, __lt__, __eq__, __ne__, __gt__,__ge__, __and__, __or__ __sub__, __xor__, and isdisjoint
(from
collections.Set
)加
clear, pop, remove, __ior__, __iand__, __ixor__, and__isub__
(from
collections.MutableSet
),这远远超过了从子类化中获得的价值
set
(在子类化中,您必须重写
每种 感兴趣的方法)。您只需要提供所需的其他设置方法即可。

请注意,像这样的抽象基类与

collections.Set
具体类是完全不同的野兽,包括诸如
set
and和(在2.6中)good old
sets.Set
,不推荐使用但仍在周围(在Python
3中已删除)的内置类。ABC是要从中继承的(一旦实现所有抽象方法,就可以从您那里合成一些方法),其次要向其“注册”类,这样即使它们没有继承,它们看起来也好像是从它们继承的(以使其
isinstance
更加有用和有用)。

这是一个适用于Python 3.1和2.6的工作示例(没有充分的理由使用3.0,因为3.1仅比它有优势,而没有劣势):

import collectionsclass LowercasingSet(collections.MutableSet):  def __init__(self, initvalue=()):    self._theset = set()    for x in initvalue: self.add(x)  def add(self, item):    self._theset.add(item.lower())  def discard(self, item):    self._theset.discard(item.lower())  def __iter__(self):    return iter(self._theset)  def __len__(self):    return len(self._theset)  def __contains__(self, item):    try:      return item.lower() in self._theset    except AttributeError:      return False


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/611599.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号