Given an arbitrary class X as input, is it possible to find out if instances of X will have a __dict__? I tried hasattr(X, '__dict__'), but that doesn't work because it checks whether the class object has a __dict__: >>> hasattr(int, '__dict__') True >>> vars(5) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: vars() argument must have __dict__ attribute The absence of __slots__ also isn't a guarantee that there's a __dict__: >>> hasattr(int, '__slots__') False >>> vars(5) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: vars() argument must have __dict__ attribute I also considered creating an instance of X with object.__new__(X) (to bypass X.__new__ and X.__init__, which could potentially have undesired side effects), but this fails for built-in types: >>> hasattr(object.__new__(int), '__dict__') Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: object.__new__(int) is not safe, use int.__new__() Is it possible to do this without calling any unknown/untrusted code (like the constructor of X)? Continue reading...