如何在python中获取模块中的所有对象?

23 浏览
0 Comments

如何在python中获取模块中的所有对象?

我需要获得一个模块中所有对象的列表,而不仅仅是它们的名称列表。例如,我有以下代码:

class myClass:  
    def __init__(self):  
        # 这里是代码
        pass
class thing1(myClass):  
    def __init__(self):  
        self.x = 1
class thing2(myClass):  
    def __init__(self):
        self.x = 2

等等。

我想要的是能够给我一个myClass中对象的列表(thing1thing2),我可以通过它调用方法/获取属性。我尝试做这样的事情:

for myThing in dir(myClass):  
    print myThing.x

dir函数只提供类的名称列表,我无法从中获取属性。

我该如何做到这一点?

0
0 Comments

问题出现的原因是需要获取Python模块中的所有对象。解决方法是使用locals()函数来获取所有局部变量及其所指向的对象,或者使用eval()exec()函数来评估变量名作为原始Python代码,然后直接使用dir()函数的结果。

在Python中,locals()函数返回一个字典,包含所有局部变量及其所指向的对象。通过调用locals()函数,可以获取当前模块中的所有对象。

另一种方法是使用eval()exec()函数来评估变量名作为原始Python代码。通过将变量名作为字符串传递给eval()exec()函数,可以执行相应的代码,并获取结果。然后可以直接使用dir()函数来获取所有对象。

下面是一个示例,演示如何使用eval()函数来评估变量名作为原始Python代码:

myThing = "Hello, world!"
eval('print(' + myThing + ')')

通过将变量myThing作为字符串传递给eval()函数,代码print('Hello, world!')被执行,并打印出结果Hello, world!

类似地,可以使用exec()函数来实现相同的效果:

myThing = "Hello, world!"
exec('print(' + myThing + ')')

上述代码将执行相同的代码,并打印出同样的结果。

要获取Python模块中的所有对象,可以使用locals()函数获取所有局部变量及其所指向的对象,或者使用eval()exec()函数来评估变量名作为原始Python代码,然后直接使用dir()函数的结果。

0
0 Comments

问题的原因是用户想要获取一个模块中的所有对象,但是在提问中给出的代码实际上是在查找一个类的子类,而不是类的内容。为了解决这个问题,可以使用内置函数`vars()`来获取类、实例或模块的成员。如果要在函数或类中获取当前模块的成员,应该使用`globals()`函数代替`vars()`函数。此外,为了正确地查看继承方法和类实例中的方法,最好使用`dir()`函数并对每个属性调用`getattr()`函数。

下面是一些在交互式提示符下使用`vars()`函数的示例:

>>> class Example:
...   def method(): pass
...
>>> class SubExample(Example):
...   pass
...
>>> class OverrideExample(Example):
...   def method():
...     pass
...
>>> globals()
{'OverrideExample': , '__builtins__': , 'Example': , '__name__': '__ma
in__', '__package__': None, '__doc__': None, 'SubExample': }
>>> Example.__subclasses__()
[, ]
>>> vars(Example)
dict_proxy({'__dict__': , '__module__': '__main__', '__weakref__': , 'm
ethod': , '__doc__': None})
>>> vars(SubExample)
dict_proxy({'__module__': '__main__', '__doc__': None})
>>> vars(OverrideExample)
dict_proxy({'__module__': '__main__', 'method': , '__doc__': None})
>>> vars(Example())
{}
>>> vars(SubExample())
{}
>>> vars(OverrideExample())
{}

需要注意的是,在模块级别可见的内容、每个类对象上可见的内容以及每个类实例上可见的内容之间的区别。另外需要注意的是,对于给定的类定义,`vars()`函数不会告诉你任何继承的方法,也不会告诉你通过类实例可用的方法。为了正确地查看这两个内容,最好按照Noufal的建议使用`dir()`函数,并对每个属性调用`getattr()`函数。

0
0 Comments

问题:如何在Python中获取一个模块中的所有对象?

原因:在某些情况下,我们可能需要获取一个模块中的所有对象,以便进行进一步的操作。但是,直接获取模块的所有属性并不是一件容易的事情。

解决方法:可以使用Python中的dir()函数来获取一个模块的所有属性。然后,通过getattr()函数来获取每个属性的值。

具体实现如下:

import module_name
for attr_name in dir(module_name):
    attr_value = getattr(module_name, attr_name)
    print(attr_name, type(attr_value))

以上代码中,module_name是要获取对象的模块名。使用dir()函数可以获取模块的所有属性名,然后通过getattr()函数可以获取每个属性的值。最后,我们可以打印出属性名和对应的类型。

这样,我们就可以获取一个模块中的所有对象,并对其进行进一步的操作。

0