如何定义像C中的结构

时间:2010-09-06 00:42:24

标签: python

我将定义一个结构并将其传递给一个函数:

在C:

struct stru {
int a;
int b;
};

s = new stru()
s->a = 10;

func_a(s);

如何在Python中完成此操作?

5 个答案:

答案 0 :(得分:25)

除非你没有告诉我们你的情况有什么特别之处,否则只需使用这样的东西:

class stru:
    def __init__(self):
        self.a = 0
        self.b = 0

s = stru()
s.a = 10

func_a(s)

答案 1 :(得分:12)

如果你对不可变类型没问题,可以使用命名元组。

import collections

struct = collections.namedtuple('struct', 'a b')

s = struct(1, 2)

否则,如果您希望能够创建多个类,只需定义一个类。

字典是另一种规范解决方案。

如果需要,可以使用此函数创建可变类,其语法与namedtuple

相同
def Struct(name, fields):
    fields = fields.split()
     def init(self, *values):
         for field, value in zip(fields, values):
             self.__dict__[field] = value
     cls = type(name, (object,), {'__init__': init})
     return cls

您可能希望为完整性添加__repr__方法。称之为s = Struct('s', 'a b')s是一个可以像a = s(1, 2)一样实例化的类。还有很大的改进空间,但是如果你发现自己做了很多这样的事情,它就能收回成本。

答案 2 :(得分:6)

很抱歉在5天后回答这个问题,但我认为这值得说明。

使用ctypes模块,如下所示:

from ctypes import *

class stru(Structure):
    _fields_ = [
        ("a", c_int),
        ("b", c_int),
    ]

当您需要执行类似C的操作(即C数据类型甚至使用C DLL)时,ctypes是模块。此外,它是标准的

答案 3 :(得分:2)

在Python中使用类和代码Python思维,避免只用相同的东西写另一种语法。

如果您需要结构存储在内存中,请尝试模块struct

答案 4 :(得分:1)

(对于未来的谷歌搜索者): 最常用的C / C ++方法是使用没有构造函数的类:

class my_struct:
    name = ''
    health = 0.0
    count = 0
    values_list = [1,2,3]

s1 = my_struct()
s1.count = 5
s1.name = 'some string'
s1.health = 0.1
s1.values_list = [4,5,6]

print s1.name
# some string