2014-09-03 2 views
0

Dill.detect.children требует двух аргументов; obj и objtype.Dill.detect.children типы объектов

Проверка в аудиофайл объект можно назвать:

dill.detect.children(audiofile, object) 
dill.detect.children(audiofile, dict) 
dill.detect.children(audiofile, list) 

возвращающие без ошибок.

Но как насчет поиска методов экземпляра?

type(audiofile.save) 

возвращается

instancemethod 

Пытались

dill.detect.children(audiofile, instancemethod) 

который возвращает

NameError: name 'instancemethod' is not defined 

Пытались

dill.detect.children(audiofile, 'instancemethod') 

который возвращает

TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types 

не должны заносить результаты, аналогичные вызова dir(audiofile)?

ответ

1

Применение types.MethodType:

types.MethodType

тип методов, определяемых пользователем экземпляров класса.

>>> import types 
>>> print types.MethodType 
<type 'instancemethod'> 
>>> p = Process() 
>>> type(p.start) == types.MethodType 
True 

Однако, я не думаю, что dill.detect.children делает то, что вы думаете, что он делает. Его строка документации говорит:

children(obj, objtype, depth=1, ignore=()) 
    Find the chain of referrers for obj. Chain will start with obj. 

    objtype: an object type or tuple of types to search for 
    depth: search depth (e.g. depth=2 is 'grandparents') 
    ignore: an object or tuple of objects to ignore in the search 

    NOTE: a common thing to ignore is all globals, 'ignore=globals()' 

    NOTE: repeated calls may yield different results, as python stores 
    the last value in the special variable '_'; thus, it is often good 
    to execute something to replace '_' (e.g. >>> 1+1). 

Это не то же самое, как «найти все атрибуты obj, которые соответствуют типу objtype», который он, по крайней мере кажется, что вы ждете, что делать.

+0

о, да. раньше играл с модулем типов. – MikeiLL

+0

Ваша ссылка - это то, как я читаю «тип объекта или кортеж типов для поиска», но означает ли это на самом деле возвращать любые объекты типа объекта в цепочке рефереров? – MikeiLL

+2

@MikeiLL Право. Итак, если вы помещаете 'audiofile' в список, а затем называете' dill.detect.children (audiofile, list) ', вы получите ссылку на этот список. Если вы используете 'dict', вы получите ссылку на' globals() 'dict back. – dano

Смежные вопросы