python中的模块中的__getattr__

时间:2013-04-04 11:28:20

标签: python iteration getattr

我正在使用python。我想知道在同一个模块中是否存在任何方法。我认为getattr()做到了这一点,但我无法做到。这是示例代码,说明我真正想要做什么。

#python module is my_module.py
def my_func():
    # I want to check the existence of exists_method
    if getattr(my_module, exists_method):
       print "yes method "
       return
    print "No method"
def exists_method():
    pass

我的主要任务是动态调用已定义的方法。如果未定义,只需使用该方法跳过操作并继续。我有一个数据字典,根据键我定义了一些必要的方法来操作相应的值。例如数据为{"name":"my_name","address":"my_address","...":"..."}。现在我定义一个名为name()的方法,我想动态地知道它确实存在与否。

2 个答案:

答案 0 :(得分:3)

您需要将名称作为字符串查找;我会在这里使用hasattr()来测试该名称:

if hasattr(my_module, 'exists_method'):
    print 'Method found!"

如果存在my_module.exists_method,则此方法有效,但如果您在 my_module内运行此代码,则无效。

如果当前模块中包含exists_method,您需要使用globals()来测试它:

if 'exists_method' in globals():
    print 'Method found!'

答案 1 :(得分:1)

您可以使用dir

>>> import time
>>> if '__name__' in dir(time):
...     print 'Method found'
... 
Method found