我如何从python中的对象获取所有变量的列表?
实施例: 一个对象是从一个类生成的,该类可以(但不是必须,它是各种各样的,类是一个黑盒子,直到现在我只能通过小费来检测变量。并检查弹出选择菜单)这种形式的变量: / p>
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这样的变量。因此无法使用复制库。
答案 0 :(得分:4)
您可以使用vars()
function直接在对象上列出所有实例属性;它返回一个字典:
>>> vars(Obj)
{'Background': <BackgroundType at 0x...>, 'DisplaySettings': <...>, ...}
或者您可以使用dir()
,它会在实例及其父级(类,基类,它们的基类等)上返回名称的列表:
>>> dir(Obj)
['__module__', '__name__', 'Active', 'Background', ...]
对象上的许多属性都是更复杂的对象,并且具有自己的属性。然后,您将检查Background
对象,例如:
>>> 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)
将复制未复制的名字元组中未列出的任何名称。
答案 1 :(得分:0)
你可以使用:
dir(obj)
为您提供对象的所有成员变量/函数。