Как получить все целые внутри экземпляра класса? - PullRequest
0 голосов
/ 29 июня 2018

Я хочу получить все int типы из неизвестного экземпляра класса.

Если у меня есть следующий класс:

class myclass:
    g_goodies = 0
    g_stringer = "bob"
    mylist = []

    def __init__(self,goodies):
        self.g_goodies = goodies
        for x in range(0,10):
            self.mylist.append(0)

И я попробовал ...

def get_ints(self,inobject):
    a = inspect.getmembers(inobject)
    b = len(a)
    print 'a:',a,' b:',b
    print 'a type:',type(a),' b type:',type(b)
    for x in range(0,b-1):
        c = type(a[x])
        print c

print "Hello World!\n"
mc = myclass(10)
pa = printanything()
print pa.get_ints(mc)

Что дает мне:

$python main.py
Hello World!

a: [('__doc__', None), ('__init__', <bound method myclass.__init__ of <__main__.myclass instance at 0x7f34ee9e80e0>>), ('__module__', '__main__'), ('g_goodies', 10), ('g_stringer', 'bob'), ('mylist', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0])]  b: 6
a type: <type 'list'>  b type: <type 'int'>
<type 'tuple'>
<type 'tuple'>
<type 'tuple'>
<type 'tuple'>
<type 'tuple'>
None

Итак, я просто хочу иметь возможность извлечь весь тип int в экземпляре класса, весь тип str в объекте класса и т. Д. Класс не известен во время выполнения.

1 Ответ

0 голосов
/ 29 июня 2018

Вы многое оставили вне своего вопроса, но вот предположение, показывающее, как сделать что-то похожее на то, что я думаю, вы хотели бы сделать:

from __future__ import print_function
import inspect
from pprint import pprint, pformat


class MyClass:
    g_goodies = 0
    g_stringer = "bob"
    mylist = []

    def __init__(self,goodies):
        self.g_goodies = goodies
        for _ in range(10):
            self.mylist.append(0)


def get_ints(inobject):
    return [name for (name, value) in inspect.getmembers(inobject)
                if isinstance(value, int)]

mc = MyClass(10)
print(get_ints(mc))  # -> ['g_goodies']

Обратите внимание, что mylist не отображается, потому что это list, а не int, но вы можете изменить get_ints(), чтобы проверить содержимое любых list s, с которыми он сталкивается, тоже, если хотите.

...