[Pythonmac-SIG] lists and accessors

Georg Seifert georg.seifert at gmx.de
Fri Jul 16 13:34:32 CEST 2010


Hi Ronald,

This works wonderfully. Many Thanks.

Georg

> 
> On 11 Jul, 2010, at 1:18, Georg Seifert wrote:
> 
>> Hi Ronald,
>> 
>> Thanks for your response.
>> 
>> I did tried this:
>> 
>> 	class PathNodesProxy (object):
>> 		def __init__(self, owner):
>> 			self._ower = owner
>> 		def __getitem__(self, i):
>> 			print "__getitem__", i
>> 			return self.nodeAtIndex_(i)
>> 		def __setitem__(self, i, Node):
>> 			print "__setitem__", i, Node
>> 			self.setNode_atIndex_(Node, i)
>> 		def __delitem__(self, i):
>> 			print "__delitem__", i
>> 			self.removeNodeAtIndex_(i)
>> 		def append(self, Node):
>> 			print "append", Node
>> 			self.addNode_(Node)
>> 		def count(self):
>> 			print "count"
>> 			return self.nodes().count()
>> 
>> 	del GSPath.__dict__['nodes']
>> 	GSPath.__dict__['nodes'] = lambda self: PathNodesProxy(self)
>> 
>> the next to last line gives this error:
>> 	TypeError: 'dictproxy' object does not support item deletion
>> and the last (if I remove the first):
>> 	TypeError: 'dictproxy' object does not support item assignment
>> 
>> If I used:
>> 	GSPath.nodes = lambda self: PathNodesProxy(self)
>> It worked somehow, but it actually removed the nodes property from the cocoa object. And I still had to use the parenthesis.
> 
> This should work:
> 
>     GSPath.nodes = property(lambda self: PathNodesProxy(self))
> 
> I've tested this with the count property on an array:
> 
> :>>> from Foundation import NSArray
> :>>> b = NSArray.arrayWithArray_([1,2])
> :>>> type(b).count = property(lambda self: id(self))
> :>>> b.pyobjc_instanceMethods.count()
> 2
> :>>> b.count
> 4359092688
> :>>> 
> 
> (The convoluted way to change the count property is because NSArray is a class cluster and is not relevant for your problem)
> 
> Ronald
> 



More information about the Pythonmac-SIG mailing list