Как проверить, является ли объект в Python? - PullRequest
1 голос
/ 08 января 2020

Мы ищем этот тип операторов, но при его попытке он не работает:

if type(item) == "<type 'oracle.sql.BLOB'>"

Справочная информация: Мы получаем объекты типа BLOB обратно из соединения JDB C в Jython , Мы пытаемся проверить, имеет ли тип возвращаемый столбец тип, поэтому мы знаем, как декодировать двоичный объект.

Что еще мы пробовали: Другие ответы на вопросы показывают примеры, где они используют имя класса (то есть тип (i) is int) в качестве теста - но в этом случае, если мы используем предполагаемое имя класса, например this:

if type(item) == oracle.sql.BLOB:

Мы получаем эту ошибку:

NameError: имя 'oracle' не определено

Несколько других ответов на вопросы упоминание этого типа использует isinstance () в качестве предпочтительного метода для проверки типов, но все ответы, которые мы видели, показали, что кодеры используют существующие объекты этого типа для проверки.

Тем не менее, в этом случае у нас нет объекта этого типа oracle blob.

Как мы проверяем тип объекта? Или как мы можем создать объект этого типа, чтобы мы могли использовать isinstance ()? Или есть другой подход?

1 Ответ

2 голосов
/ 08 января 2020

Вы можете получить класс времени выполнения объекта, используя -

.getClass().getName()

Вам нужно будет сделать следующее:

if item.getClass().getName() == 'oracle.sql.BLOB':
    print "This is a BLOB."

Пример кода:

import java.util.ArrayList as ArrayList

arr = ArrayList()
arr.add(10)
arr.add(20)
print arr
print "Name:", arr.getClass().getName()
print "Simple Name:", arr.getClass().getSimpleName()

if arr.getClass().getName() == 'java.util.ArrayList':
    print "This is an ArrayList."

Выход:

> jython check_type.py
[10, 20]
Name: java.util.ArrayList
Simple Name: ArrayList
This is an ArrayList.
...