Есть ли другой способ перебора только атрибутов пользовательского класса, которые не встроены (например, __dict__
, __module__
и т.д.)? Например, в этом коде:
class Terrain:
WATER = -1
GRASS = 0
HILL = 1
MOUNTAIN = 2
Я могу выполнить итерацию по всем этим атрибутам следующим образом:
for key, value in Terrain.__dict__.items():
print("{: <11}".format(key), " --> ", value)
который выводит:
MOUNTAIN --> 2
__module__ --> __main__
WATER --> -1
HILL --> 1
__dict__ --> <attribute '__dict__' of 'Terrain' objects>
GRASS --> 0
__weakref__ --> <attribute '__weakref__' of 'Terrain' objects>
__doc__ --> None
Если мне просто нужны целые аргументы (a рудиментарная версия перечисленного типа), я могу использовать это:
for key, value in Terrain.__dict__.items():
if type(value) is int: # type(value) == int
print("{: <11}".format(key), " --> ", value)
это дает ожидаемый результат:
MOUNTAIN --> 2
WATER --> -1
HILL --> 1
GRASS --> 0
Можно ли выполнять итерацию только не встроенных атрибутов пользовательского класса, не зависящего от типа, например. если атрибуты не являются целыми. Предположительно, я мог бы расширить условное число, чтобы включить больше типов, но я хочу знать, есть ли другие способы, которые мне не хватает.