Steven D'Aprano wrote:
Well, that is a surprise, but I don't think that is intended behaviour. I think that's something which only works by accident. The intention is that __class__ returns the instance's type, not arbitrary values.

Well, a proxy object would obviously return a suitable
class-like object. I was just demonstrating that it's
possible to override what __class__ returns.

I don't think it's an accident, because the weakref
module uses this for its proxy objects.

>>> import weakref
>>> class C(object):
...  pass
...
>>> c = C()
>>> p = weakref.proxy(c)
>>> p.__class__
<class '__main__.C'>
>>> type(p)
<type 'weakproxy'>

If you try to set it to a non-class on the instance, it fails:

For proxying purposes you don't need to be able to set
it, but I don't see why you couldn't use a property
setter to override that behaviour as well if you really
wanted to.

--
Greg
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to