Есть ли способ программно определить структуру / модель объекта, его составные части, как его можно повторять, манипулировать и преобразовывать, разбивать и восстанавливать?
Метод проб и ошибок - замечательные учителя.Я беру их занятия каждый день.Но здесь я ищу способ «работать умнее» или, по крайней мере, по-другому.
Немного предыстории: недавно я провел слишком много часов, неправильно обрабатывая объект pandas groupby
, потому что я не понималчасти строительного блока и типы, из которых это сделано.Я неправильно обработал кортеж, возвращаемый при итерации объекта groupby
.Теперь у меня есть немного лучшее, но не совсем достаточное понимание этого конкретного объекта: например, groupby
obj разбивается на "params
" и "table
" при повторении.table
, в свою очередь, состоит из index
и rows
.Но я все еще не уверен, как справиться с rows
: из чего они сделаны или сломаны. Этот пост содержит код для воспроизведения проблемы: см. Редактирование 2 внизу оригинального сообщения.
Но это частный случай;мой вопрос более общий.Мой вопрос: если я еще не знаю структуру или «модель» объекта / типа Python, как я могу запросить объект, чтобы раскрыть эту информацию в текстовом или, что еще лучше, в графическом виде?
Редактировать :
В целях изучения и изучения ниже я пытаюсь запустить каждый метод str
для объекта str
через цикл for
.meth
obj правильно интерпретируется в первых двух строках цикла (например, __add__
и __class__
), но интерпретируется как meth
, когда я пытаюсь запустить obj.meth
.Как это исправить?
Вход:
obj = 'my_string'
object_methods = [method_name for method_name in dir(obj)
if callable(getattr(obj, method_name))]
print(len(object_methods))
print(object_methods)
Выход:
77
['__add__', '__class__', . . ., 'upper', 'zfill']
Вход:
for meth in object_methods:
print(meth)
try:
print('obj.meth for obj', obj, 'and method', meth, ':')
obj.meth
except AttributeError as e:
print('obj.meth for obj', obj, 'and method', meth, ': AttributeError:', e)
Выход:
__add__
obj.meth for obj my_string and method __add__ :
obj.meth for obj my_string and method __add__ : AttributeError: 'str' object has no attribute 'meth'
__class__
obj.meth for obj my_string and method __class__ :
obj.meth for obj my_string and method __class__ : AttributeError: 'str' object has no attribute 'meth'
. . .