Почему я получаю неожиданное поведение в Python isinstance после соления?

Этот следующий синтаксис работает для меня.

UPDATE
(SELECT A.utl_id,
    b.utl1_id
    FROM trb_pi_joint A
    JOIN trb_tpr B
    ON A.tp_id=B.tp_id Where A.pij_type=2 and a.utl_id is null
)
SET utl_id=utl1_id;
7
задан GEOCHET 14 March 2009 в 01:19
поделиться

3 ответа

Это - то, как unpickler работает (site-packages/pickle.py):

def find_class(self, module, name):
    # Subclasses may override this
    __import__(module)
    mod = sys.modules[module]
    klass = getattr(mod, name)
    return klass

, Чтобы найти и инстанцировать класса.

Поэтому, конечно, если Вы заменяете класс тождественно именованным классом, эти klass = getattr(mod, name), возвратит новый класс, и экземпляр будет иметь новый класс, и таким образом, isinstance перестанет работать.

5
ответ дан 6 December 2019 в 23:13
поделиться

Очевидный ответ, потому что не тот же класс.

подобный класс, но не то же.

class myclass(object):
    pass

x = myclass()

class myclass(object):
    pass

y = myclass()


assert id(x.__class__) == id(y.__class__) # Will fail, not the same object

x.__class__.foo = "bar"

assert y.__class__.foo == "bar" # will raise AttributeError
4
ответ дан 6 December 2019 в 23:13
поделиться

Измените свой код для печати id из x.__class__ и x2.__class__, и Вы будете видеть, что они отличаются:

$ python foo4.py
199876736
200015248
2
ответ дан 6 December 2019 в 23:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: