C struct python等价

use*_*813 4 c python

我有这个C代码:

    typedef struct test * Test;

    struct test {
        void *a;
        Test next;
    };
Run Code Online (Sandbox Code Playgroud)

你将如何在Python中实现与此相当的东西(如果可能的话)?

phi*_*hag 15

在Python中,您可以将任何类型的对象分配给变量; 所以你可以使用任何类,如下所示:

class test(object):
    __slots__ = ['a', 'next']

x = test()
x.next = x
x.a = 42
Run Code Online (Sandbox Code Playgroud)

请注意,这__slots__可选的,应该减少内存开销(它也可以加快属性访问).此外,您经常要创建一个构造函数,如下所示:

class test(object):
    def __init__(self, a, next):
        self.a = a
        self.next = next

x = test(21, None)
assert x.a == 21
Run Code Online (Sandbox Code Playgroud)

如果类可以是不可变的,您可能还想看看namedtuple:

import collections
test = collections.namedtuple('test', ['a', 'next'])
Run Code Online (Sandbox Code Playgroud)

  • 我并不认为`__slots__`会使代码运行得更快(尽管我认为可能).通常,如果您要实例化大量简单对象,它将用于节省内存. (3认同)