如何定义像C中的结构

Bin*_*hen 20 python

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

在C:

struct stru {
int a;
int b;
};

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

func_a(s);
Run Code Online (Sandbox Code Playgroud)

如何在Python中完成此操作?

Nat*_*vis 29

除非你的情况有些特别,你没有告诉我们,只要使用这样的东西:

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

s = stru()
s.a = 10

func_a(s)
Run Code Online (Sandbox Code Playgroud)


aar*_*ing 12

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

import collections

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

s = struct(1, 2)
Run Code Online (Sandbox Code Playgroud)

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

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

如果需要,可以使用此函数创建具有相同语法的可变类 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
Run Code Online (Sandbox Code Playgroud)

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


Raf*_*ler 6

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

ctypes像这样使用模块:

from ctypes import *

class stru(Structure):
    _fields_ = [
        ("a", c_int),
        ("b", c_int),
    ]
Run Code Online (Sandbox Code Playgroud)

当你需要做类似C的事情(即C数据类型甚至使用C DLL)时,ctypes是模块.此外,它是标准的