Python 从类获取/循环变量树

Python 从类获取/循环变量树,python,python-2.x,Python,Python 2.x,在python中,如何从对象获取所有变量的列表 例如: 一个对象是从一个类生成的,这个类可以有(但不是必须有,它是各种各样的,这个类是一个黑盒子,到目前为止,我只能通过倾斜来检测变量。并检查弹出选择菜单)以下形式的变量: obj.Background.Picture.Embedded obj.Background.Picture.Path obj.Background.Picture.Style obj.Background.Picture.Visible # ...... obj.D

在python中,如何从对象获取所有变量的列表

例如: 一个对象是从一个类生成的,这个类可以有(但不是必须有,它是各种各样的,这个类是一个黑盒子,到目前为止,我只能通过倾斜来检测变量。并检查弹出选择菜单)以下形式的变量:

obj.Background.Picture.Embedded  
obj.Background.Picture.Path  
obj.Background.Picture.Style 
obj.Background.Picture.Visible
# ......
obj.DisplaySettings.DisplayFormat.Source.Dec.DisplaySign
obj.DisplaySettings.DisplayFormat.Source.Dec.Format
obj.DisplaySettings.DisplayFormat.Source.Dec.Precision
obj.DisplaySettings.DisplayFormat.Source.Dec.UsePrecision
# ......
obj.UniqueID
# .....
并且该对象还可以具有如下功能:

Obj.MoveDown()
Obj.MoveUp()
# .....
Obj.Active()
Obj.Remove()
我怎么才能得到这样的字符串格式的列表呢

VarList = ['obj.Background.Picture.Embedded', ... , 'Obj.DisplaySettings.DisplayFormat.Source.Dec.DisplaySign', ... , 'obj.UniqueID']
目的是将一些变量从obj复制到obj。比如:

Obj1.DisplaySettings.DisplayFormat.Source.Dec.DisplaySign = obj2.DisplaySettings.DisplayFormat.Source.Dec.DisplaySign
由于某些原因,像UniqueID这样的变量不应该被复制。因此,使用复制库是不可能的

您可以使用:

dir(obj)
为您提供对象的所有成员变量/函数。

您可以使用:

dir(obj)
为您提供对象的所有成员变量/函数。

您可以使用直接列出对象上的所有实例属性;它返回一个字典:

 >>> vars(Obj)
 {'Background': <BackgroundType at 0x...>, 'DisplaySettings': <...>, ...}
对象上的许多属性都是更复杂的对象,并且具有自己的属性。然后检查
背景
对象,例如:

>>> dir(Obj.Background)
[ ..., 'Picture', ...]
等等

要跨属性复制,我需要使用
vars()
和一个循环来过滤:

dec1 = Obj1.DisplaySettings.DisplayFormat.Source.Dec
dec2 = Obj2.DisplaySettings.DisplayFormat.Source.Dec
for name, value in vars(dec1).items():
    if name not in ('UniqueID', ...):
        setattr(dec2, name, value)
它将复制未列在不复制名称元组中的任何名称。

您可以使用直接列出对象上的所有实例属性;它返回一个字典:

 >>> vars(Obj)
 {'Background': <BackgroundType at 0x...>, 'DisplaySettings': <...>, ...}
对象上的许多属性都是更复杂的对象,并且具有自己的属性。然后检查
背景
对象,例如:

>>> dir(Obj.Background)
[ ..., 'Picture', ...]
等等

要跨属性复制,我需要使用
vars()
和一个循环来过滤:

dec1 = Obj1.DisplaySettings.DisplayFormat.Source.Dec
dec2 = Obj2.DisplaySettings.DisplayFormat.Source.Dec
for name, value in vars(dec1).items():
    if name not in ('UniqueID', ...):
        setattr(dec2, name, value)

这将复制未列在不复制名称元组中的任何名称。

谢谢!然而,使用vars(obj)我得到了结果{'oleobj':}。它有一些函数,如clear()copy()等。@user3327364:您需要查阅正在使用的任何OLE对象(或包装器库)的文档,以了解如何处理这些对象。这里有Windows对象的代理对象,而不是普通的Python类。谢谢!然而,使用vars(obj)我得到了结果{'oleobj':}。它有一些函数,如clear()copy()等。@user3327364:您需要查阅正在使用的任何OLE对象(或包装器库)的文档,以了解如何处理这些对象。这里有Windows对象的代理对象,而不是常规Python类。