到目前为止这是我的代码,
import win32com.client as winc
outlook = winc.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6)
messages = inbox.Items
message = messages.GetLast()
print message.body
Run Code Online (Sandbox Code Playgroud)
并message.body从outlook打印我的最后一封电子邮件.
当我dir(message)或help(message)属性body没来.为什么?
>>> dir(message)
['_ApplyTypes_', '_FlagAsMethod', '_LazyAddAttr_', '_NewEnum', '_Release_', '__AttrToID__', '__LazyMap__', '__call__', '__doc__', '__eq__', '__getattr__', '__getitem__', '__init__', '__int__', '__len__', '__module__', '__ne__', '__nonzero__', '__repr__', '__setattr__', '__setitem__', '__str__', '_builtMethods_', '_enum_', '_find_dispatch_type_', '_get_good_object_', '_get_good_single_object_', '_lazydata_', '_make_method_', '_mapCachedItems_', '_oleobj_', '_olerepr_', '_print_details_', '_proc_', '_unicode_to_string_', '_username_', '_wrap_dispatch_']
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
更新
无论如何,我可以毫无疑问地了解对象的所有属性吗?
根据此页面http://docs.python.org/2/library/functions.html#dir
因为dir()主要是为了方便在交互式提示中使用而提供的,所以它尝试提供一组有趣的名称,而不是尝试提供严格或一致定义的名称集,并且其详细行为可能会在不同版本之间发生变化.例如,当参数是类时,元类属性不在结果列表中.
所以,我们不应该依赖于dir了解一个对象.如果该类实现__dir__方法,我们将只获取从该方法返回的任何内容.他们可能已经实施__dir__并body从dir呼叫中抽象出来.
例:
class TestClass:
def __init__(self):
self.myValue = 0
def myMethod(self):
pass
def __dir__(self):
return []
class TestClass1:
def __init__(self):
self.myValue = 0
def myMethod(self):
pass
print dir(TestClass())
print dir(TestClass1())
print dir(TestClass())
print dir(TestClass1())
Run Code Online (Sandbox Code Playgroud)
产量
[]
['__doc__', '__init__', '__module__', 'myMethod', 'myValue']
Run Code Online (Sandbox Code Playgroud)