Skip to main content
 首页 » 编程设计

python之在 python 中创建 C/C++ 类结构对象的最佳方法是什么

2025年05月04日15虾米姐

我一直在从 Matlab 转向 NumPy/Scipy,我认为 NumPy 在很多方面都很棒。

但让我感到不舒服的一件事是,我在 C/C++ 中找不到类似于 struct 的数据结构。

例如,我可能想做以下事情:

struct Parameters{ 
  double frame_size_sec; 
  double frame_step_sec; 
} 

一种最简单的方法是使用字典,如下所示。

  parameters = {"frame_size_sec" : 0.0, "frame_step_sec", 0.0} 

但在字典的情况下,与结构不同,可以添加任何键。我想限制 key 。

另一种选择可能是使用如下类。但它也有同样类型的问题。

class Parameters: 
  frame_size_sec = 0.0 
  frame_step_sec = 0.0 

从一个线程中看到有一个数据结构叫named tuple,看起来不错,但是最大的问题就是字段是不可变的。所以还是和我想要的不一样。

总而言之,在 python 中使用类结构对象的最佳方式是什么?

请您参考如下方法:

如果您不需要实际的内存布局保证,用户定义的类可以使用 __slots__ 将它们的实例成员集限制在一个固定的列表中。 .例如:

class Parameters:  # On Python 2, class Parameters(object):, as __slots__ only applies to new-style classes 
    __slots__ = 'frame_size_sec', 'frame_step_sec' 
    def __init__(self, frame_size_sec=0., frame_step_sec=0.): 
        self.frame_size_sec = float(frame_size_sec) 
        self.frame_step_sec = float(frame_step_sec) 

为您提供一个在初始化时保证分配两个 float 成员的类,并且任何人都不能(无意或有意)向该类的任何实例添加新的实例属性。

请阅读__slots__ 文档中的注意事项;例如,在继承情况下,如果父类(super class)没有定义 __slots__,那么子类仍将具有 __dict__,因此可以在其上定义任意属性。

如果您需要内存布局保证和更严格的 (C) 变量类型,您需要查看 ctypes Structures ,但从你所说的来看,听起来你只是在尝试强制执行一组固定的、有限的属性,而不是特定类型或内存布局。