我要定义一个结构,并将它传递到一个函数的结构:如何定义类似于C
在C:
struct stru {
int a;
int b;
};
s = new stru()
s->a = 10;
func_a(s);
这可怎么在Python做呢?
我要定义一个结构,并将它传递到一个函数的结构:如何定义类似于C
在C:
struct stru {
int a;
int b;
};
s = new stru()
s->a = 10;
func_a(s);
这可怎么在Python做呢?
除非有什么特别的你的情况,你不告诉我们,只要用这样的:
class stru:
def __init__(self):
self.a = 0
self.b = 0
s = stru()
s.a = 10
func_a(s)
如果你确定使用不可变类型,则使用命名元组。
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)
。有很大的改进空间,但如果你发现自己做这种事情很多,它会为自己付出代价。
嗨,你的第二个例子(object())不能编译... – 2010-09-06 00:57:42
陈斌。正确。这一直在发生在我身上。 – aaronasterling 2010-09-06 01:05:40
在Python中使用类和代码Python思想,避免只写另一种语法的同样的东西。
如果你需要它是如何存储在内存中的结构,尽量模块struct
5天后,很抱歉回答这个问题,但我认为这是值得说明的。
使用模块,像这样:
from ctypes import *
class stru(Structure):
_fields_ = [
("a", c_int),
("b", c_int),
]
当你需要做一些类似C(即ç数据类型,甚至用C的DLL),是模块。此外,它标配
(对于未来谷歌搜索): 做的大多数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
你应该阅读初学者的Python教程,而比在这里问这个问题。 – 2010-09-06 01:03:32
'new'不是C;它是C++。 – strager 2010-09-06 01:20:05