覆盖集合行为

大家好,我想修改设置用于查看是否存在的方法
已经是其OBJ列表中的对象.这样的事情:
foo类:通过
bar1 = foo()
bar1.attr = 1
bar2 = foo()
bar2.attr = 1
set(((bar1,bar2),key = lambda o:o.attr)
当然,集合只有一个值.
这是可能的?
谢谢,
米歇尔

# 回答1


在2008年9月4日星期四11:48:18 +0200,Michele Petrazzo写道:
...
据我了解,您需要描述符:http://users.rcn.com/python/download/descriptor.htm
- -
问候,
wojtek walczak,http://tosh.pl/gminick/
# 回答2


Ciao,Michele:
2008年9月4日,上午11:48在星期四,米歇尔·彼得拉佐(Michele Petrazzo)
查看来源,也许您可​​以创建一个集合的子类
重新定义__contains__方法?
问候
马可
- -
marco bizzarri http://notenotturne.blogspot.com/ http://iliveinpisa.blogspot.com/(_@_ _)
2008年9月4日,上午11:58上
...
据我了解,您需要描述符:http://users.rcn.com/python/download/descriptor.htm
我知道描述了一个小小的,wojtek,但不经常使用它们.你能
详细说明您的想法?
萨鲁蒂
马可
- -
marco bizzarri http://notenotturne.blogspot.com/ http://iliveinpisa.blogspot.com/(_@_ _)
Michele Petrazzo写道:
使用装饰商/代表模式,是的:
类foo(对象):
def __init __(自我,代表):
self.delegate =委托
def __hash __(自我):
返回哈希(self.delegate.attr)
def __cmp __(自我,其他):
返回cmp(self.delegate.attr,other.delegate.attr)
设置(foo(a)用于a in bar1,bar2)
diez
# 回答3


Marco Bizzarri写道:
做了一些尝试,但____tinains__从未被称为
.... def __contains __(自我,价值):
....打印值
...
谢谢,
米歇尔
# 回答4


LE 2008年9月4日星期四14:31:23 Michele Petrazzo,VousAvezécrit*:
做了一些尝试,但____tinains__从未被称为
不,__contains__仅与" in"运算符一起调用,而不是内部哈希.
无论如何,这个解决方案不好,您需要将新元素与所有内容进行比较
该集合包含,这将导致o(n)算法添加元素
代替O(1)的设置.
正确的方法是像Diez一样在上一篇文章中向您展示.
- -
_____________
Maric Michaud
# 回答5


在2008年9月4日的星期四,下午3:07,Maric Michaud 做了一些尝试,但____tinains__从未被称为
不,__contains__仅与" in"运算符一起调用,而不是内部哈希.
无论如何,这个解决方案不好,您需要将新元素与所有内容进行比较
该集合包含,这将导致o(n)算法添加元素
代替O(1)的设置.
感谢您的澄清,Maric;我请通知来看来源
下一次更接近((希望在写错误的答案之前).
问候
马可
- -
marco bizzarri http://notenotturne.blogspot.com/ http://iliveinpisa.blogspot.com/
# 回答6

Marco Bizzarri在THU,2008年9月4日12:06:14 +0200写道: 马可,我认为我误解了OP,但我在想 关于不变的(或设置)属性. 这样的事情: --- 类SetOnce(对象): def __init __(自我): self._attr1 ="" self._attr1flag = false def setatt(self,x): 如果self._attr1flag: 提高ValueError("属性已经设置") self._attr1flag = true self._attr1 = x def getAtt(self): 返回self._attr1 attr1 =属性(getatt,setatt) a = setOnce() a.attr1 = 1 打印A.Attr1 尝试: a.attr1 = 2 除valueerror: 打印A.Attr1 --- $ Python Immutattr.py 1 1 $ - - 问候, wojtek walczak,http://tosh.pl/gminick/

标签: python

添加新评论