如何询问有关其结构的python对象?

时间:2019-02-17 12:21:11

标签: python oop object

是否有一种方法可以以编程方式确定对象的结构/模型,其组成部分,如何对其进行迭代,操纵和转换,分解和构建备份?

试错是很好的老师。我每天上课。但是在这里,我正在寻找一种“更聪明地”工作或至少有所不同的方法。

一些背景知识:最近,我花了太多时间错误地处理了一个熊猫groupby对象,因为我不了解它所构成的构建块部件和类型。我没有正确处理在groupby对象上进行迭代时返回的元组。现在,我对该特定对象有了更好的理解,但还远远不够。例如,一个groupby obj在迭代时分解为“ params”和“ table”。 table又由indexrows组成。但是我仍然不确定如何处理rows:它们是由什么组成或分解成什么。 This post包含重现此问题的代码:请参阅原始文章底部的“编辑2”。

但这是一个特例;我的问题更笼统。我的问题是,如果我还不了解python对象/类型的结构或“模型”,如何查询该对象以文本方式显示此信息,或者甚至可能以图形方式显示此信息?


修改

出于探索和学习的目的,下面我尝试通过str循环在str对象上运行每个for方法。 meth obj在循环的前两行(例如__add____class__)中被正确解释,但是当我尝试运行{{ 1}}。我该如何解决?

输入:

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']

1 个答案:

答案 0 :(得分:3)

您可以使用 __dict___ dir 来查看对象模型。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

jack = Person('jack',23)
print(jack.__dict__)
print(dir(jack))

输出:

{'age': 23, 'name': 'jack'}
['__doc__', '__init__', '__module__', 'age', 'name']