A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://mail.python.org/pipermail/python-dev/2015-October/141975.html below:

[Python-Dev] type(obj) vs. obj.__class__

[Python-Dev] type(obj) vs. obj.__class__Serhiy Storchaka storchaka at gmail.com
Tue Oct 20 04:21:28 EDT 2015
On 18.10.15 00:45, Eric Snow wrote:
> So, would it make sense to establish some concrete guidelines about
> when to use type(obj) vs. obj.__class__?  If so, what would those be?
> It may also be helpful to enumerate use cases for "type(obj) is not
> obj.__class__".

My conclusion of this discussion. In Python 3 type(obj) and 
obj.__class__ are the same in common case. Assigning obj.__class__ is a 
way to change type(obj). If the assignment is successful, type(obj) 
becomes the same as obj.__class__. This is used in importlib for lazy 
importing and some clever classes like the RingBuffer recipe. But 
__class__ assignment has many restrictions, and changing Python to C 
implementation or adding __slots__ for sure adds new restrictions.

obj.__class__ is different from type(obj) in proxy classes like weakref 
or Mock. isinstance() and pickle take __class__ to account to support 
proxies.

Unless we write proxy class or code that should handle proxy classes, we 
shouldn't care about the difference between type(obj) and obj.__class__, 
and can use what is the more convenient. In Python this is obj.__class__ 
(avoids globals lookup), and in C this is type(obj) (much simpler and 
reliable code).


More information about the Python-Dev mailing list

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4