Path: csiph.com!usenet.pasdenom.info!news.etla.org!nntp-feed.chiark.greenend.org.uk!ewrotcd!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Gregory Ewing Newsgroups: comp.lang.python Subject: Re: Type of an object: Date: Wed, 18 Dec 2013 11:15:03 +1300 Lines: 33 Message-ID: References: <52af7bfe$0$29976$c3e8da3$5496439d@news.astraweb.com> <52b0006a$0$29973$c3e8da3$5496439d@news.astraweb.com> <52b06902$0$29976$c3e8da3$5496439d@news.astraweb.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Trace: individual.net y9F1X/LO5WTrkfZVvEor8wllQ7LJHVgPcihVd9HivctSL2vlcS Cancel-Lock: sha1:CM5sQBTNDN0G19EkzJrftyOC8FU= User-Agent: Mozilla Thunderbird 1.0.5 (Macintosh/20050711) X-Accept-Language: en-us, en In-Reply-To: <52b06902$0$29976$c3e8da3$5496439d@news.astraweb.com> Xref: csiph.com comp.lang.python:62243 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__ >>> type(p) > 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