Python如何获得结构中所有字段的列表?

2024-10-01 13:32:04 发布

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

我发现下面的代码允许我创建一个“类似Matlab”的结构变量:

class vidOutClass:
        pass

    vidOut = vidOutClass()
    vidOut.numOfFrames = numOfFrames
    vidOut.frameWidth = frameWidth
    vidOut.frameHeight = frameHeight

现在,我有了结构vidOut,里面有3个字段:“numOfFrames”、“frameWidth”、“frameHeight”

是否有一种方法可以检索结构中的所有现有字段

在MATLAB中,它将如下所示:

fieldnames(vidOut)

这将生成一个包含所有字段名的单元格

谢谢


Tags: 方法代码pass结构class字段名matlabfieldnames
3条回答

您提供的代码可能有效,但这不是最佳实践,在Python中,您可以使用名为__init__的类constructor函数,如下所示:

class VidOutClass:
    def __init__(self, num_of_frames, frame_width, frame_height):
        self.num_of_frames = num_of_frames
        self.frame_width = frame_width
        self.frame_height = frame_height

那么就这样称呼它:

# Will create a VidOutClass object with 10 frames, and width x height of 150x150
vid_out = VidOutClass(num_of_Frames=10, frame_width=150, frame_height=150)

然后,如@cnu所述here,您可以使用__dict__.keys(),或者在您的代码中:

for key, val in vid_out.__dict__.items():
    print(key, val)

您可以使用.__dict__返回一个字典,其中变量名作为键,值作为…值

如果只想获取值,可以说.__dict__.values()

据我所知,我认为您没有正确使用Python类。您可以使用dictionary实现与结构的等效,而Python class更倾向于像实际类一样使用,包括实例和所有实例

vidOut = {}
vidOut["numOfFrames"] = numOfFrames
vidOut["frameWidth"] = frameWidth
vidOut["frameHeight"] = frameHeight

print(vidOut.keys())

相关问题 更多 >