这个问题可能有点绿。
在下面的例子中,我试图从"消息"中找出一个属性列表。参数。
@respond_to("^meow")
def remind_me_at(self, message):
fre = "asd: %s " % str(message.sender)
fre = "asd: %s " % str(message.mention_name)
fren = "asd: %s " % str(message.sender.name)
#fren = "hello, %s!" % str(message)
self.say(fren, message=message)
self.say(fre, message=message)
由于没有文档,但代码是opensource,如何找到有效实现方法的文件;即使该类在库文件中。
[[更新]] 我在另一个线程上找到了这个解决方案,以不同的方式提问:
[(name,type(getattr(math,name))) for name in dir(math)]
答案 0 :(得分:2)
使用dir()
内置功能。它返回一个对象的所有属性的列表。
print dir(message)
答案 1 :(得分:2)
dir([object]) -> list of strings
If called without an argument, return the names in the current scope.
Else, return an alphabetized list of names comprising (some of) the
attributes of the given object, and of attributes reachable from it.
If the object supplies a method named __dir__, it will be used;
otherwise the default dir() logic is used and returns:
for a module object: the module's attributes.
for a class object: its attributes, and recursively the attributes
of its bases.
for any other object: its attributes, its class's attributes, and
recursively the attributes of its class's base classes.
请求定义一个名为 TestClass 的演示类,如下所示。
>>> class TestClass(object):
... def abc(self):
... print('Hello ABC !')
...
... def xyz(self):
... print('Hello xyz !')
...
>>> dir(TestClass)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'abc', 'xyz']
getattr(object, name[, default]) -> value
Get a named attribute from an object;
getattr可以从 TestClass 获取属性:
>>> getattr(TestClass, 'abc')
<unbound method TestClass.abc>
>>> getattr(TestClass, 'xxx', 'Invalid-attr')
'Invalid-attr'
hasattr(object, name) -> bool
Return whether the object has an attribute with the given name.
演示:
>>> hasattr(TestClass, 'abc')
True
>>> hasattr(TestClass, 'xxx')
False
如果没有什么可以帮助你,请明确你的想法。
答案 2 :(得分:1)
如Rob所述,dir
命令能够列出属性。当您尝试调试正在运行的代码时,这很方便。
如果您可以与代码进行交互式会话(您知道,只需运行ol&#39; REPL解释器),请尝试:
>>> help(message)
如果该图书馆的开发人员是一个体面的人,那么他们希望他们写了一篇有价值的文档字符串,它会给你一些有关该对象的背景信息。
另一个方便的工具是__file__属性,但这仅适用于模块。
因此,如果您知道导入的名称message
,则可以执行以下操作:
>>> import some_module # `message` comes from this module
>>> some_module.__file__
/usr/lib/python/python35/lib/site-packages/some_module/__init__.py
了解目录后,只需开始点击message
的来源:
$ cd /usr/lib/python/python35/lib/site-packages/some_module
$ grep -r message *