Отличать собственный тип от пользовательского типа ⇐ Python

Программы на Python
Anonymous
Отличать собственный тип от пользовательского типа

Сообщение Anonymous »

Я хочу иметь возможность отличать какой-либо собственный класс, например _functools.partial (код, код) от некоторого пользовательского класса, например:

Код: Выделить всё

class MyClass:
pass
Я хочу протестировать это изнутри Python (поэтому не использую API CPython или что-то в этом роде). Но ничего страшного, если это работает только с CPython. Это должно работать для CPython >=3.6.
Как?
Более конкретно, я хочу различать объекты, где есть __dict__/

Код: Выделить всё

__slots__
не предоставит мне все атрибуты объекта. Обычно это относится к собственным типам, таким как _functools.partial, где func, args, ключевые слова отсутствуют в __dict__ (и __slots__ не существует).
Некоторые предыстории/идеи, которые могут быть полезны для ответа:
  • Код: Выделить всё

    functools.partial.__dict__
    обычно пуст или отсутствует.
  • Код: Выделить всё

    functools.partial.__slots__
    существует только в том случае, если Python использует чистую реализацию Python, что обычно не так.
  • Код: Выделить всё

    functools.partial.__getstate__()
    существует начиная с Python >=3.11 и возвращает __dict__ (и, возможно, __slots__), поэтому в случае собственного частичного он будет пустым или None . (Не уверен, что это действительно так. См. проблему CPython № 125094.)
  • Код: Выделить всё

    functools.partial.__dir__(functools.partial)
    также не распространяется на func и co? Однако dir(functools.partial)?
    Сначала я думал, что, возможно, __dictoffset__ дает мне какую-то подсказку, но это оказалось не так.


Подробнее здесь: https://stackoverflow.com/questions/790 ... -user-type

Вернуться в «Python»