Я пытаюсь сделать так, чтобы мой класс отображался как другой объект, чтобы обойти ленивую проверку типов в пакете, который я использую. В частности, я пытаюсь сделать так, чтобы мой объект отображался как экземпляр другого объекта (в моем случае tuple
), хотя на самом деле он даже не является его производным.
Для этого я планирую перезаписать метод __isinstance__
, который, согласно docs должны делать именно то, что я хочу. Однако, похоже, я не понял, как именно это сделать, потому что мои попытки не увенчались успехом.
Вот SSCCE, который должен заставить isinstance
возвращать False
во всех случаях, но этого не происходит.
class FalseInstance(type):
def __instancecheck__(self, instance):
return False
class Foo(metaclass=FalseInstance):
pass
g = Foo()
isinstance(g, Foo)
> True
Что я делаю не так?
TrueInstance
. - person Dunes   schedule 04.09.2018__isinstance__
всегда возвращал True, он все равно не будет работать так, как я ожидал:isinstance(g, int)
по-прежнему возвращаетFalse
. В чем проблема? - person Nearoo   schedule 04.09.2018tuples
неизменяемы и поэтому немного громоздки в использовании, верно? Я еще не знаю, какие аспекты кортежа необходимы для работы пакета, но я подумал, что добавлю их всякий раз, когда возникают исключения... - person Nearoo   schedule 04.09.2018