[Python] Is it possible to find out if instances of a class have a __dict__?

Discussão em 'Python' iniciado por Stack, Abril 13, 2025.

  1. Stack

    Stack Membro Participativo

    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...

Compartilhe esta Página