从类获取/循环变量树

2024-10-03 19:26:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我应该如何从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这样的变量不应该被复制。因此,使用拷贝库是不可能的。你知道吗


Tags: 对象obj示例source列表菜单decembedded
2条回答

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

 >>> vars(Obj)
 {'Background': <BackgroundType at 0x...>, 'DisplaySettings': <...>, ...}

或者可以使用^{},它返回实例及其父级(类、基类及其基类等)的名称列表:

>>> 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)

它将复制任何未在不复制的名称元组中列出的名称。你知道吗

您可以使用:

dir(obj)

提供对象的所有成员变量/函数。你知道吗

相关问题 更多 >