首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python中的类C结构

Python中的类C结构
EN

Stack Overflow用户
提问于 2008-08-30 14:33:26
回答 16查看 706.6K关注 0票数 574

有没有一种方法可以方便地在Python中定义类似C的结构?我厌倦了写这样的东西:

代码语言:javascript
复制
class MyStruct():
    def __init__(self, field1, field2, field3):
        self.field1 = field1
        self.field2 = field2
        self.field3 = field3
EN

回答 16

Stack Overflow用户

发布于 2008-08-30 15:19:00

使用在Python2.6的标准库中添加到collections module中的named tuple。如果您需要支持Python2.4,也可以使用Raymond Hettinger的named tuple配方。

对于您的基本示例来说,这很好,但也涵盖了您稍后可能会遇到的一些边缘情况。上面的代码片段将被写成:

代码语言:javascript
复制
from collections import namedtuple
MyStruct = namedtuple("MyStruct", "field1 field2 field3")

新创建的类型可以像这样使用:

代码语言:javascript
复制
m = MyStruct("foo", "bar", "baz")

您还可以使用命名参数:

代码语言:javascript
复制
m = MyStruct(field1="foo", field2="bar", field3="baz")
票数 380
EN

Stack Overflow用户

发布于 2008-08-30 14:38:38

你可以在很多事情上使用元组,其中你可以在C中使用结构(例如x,y坐标或RGB颜色)。

对于其他任何东西,您都可以使用字典或this one之类的实用程序类

代码语言:javascript
复制
>>> class Bunch:
...     def __init__(self, **kwds):
...         self.__dict__.update(kwds)
...
>>> mystruct = Bunch(field1=value1, field2=value2)

我认为在Python Cookbook的发行版中,“权威”的讨论是here

票数 102
EN

Stack Overflow用户

发布于 2010-09-21 23:15:34

也许你正在寻找没有构造函数的Structs:

代码语言:javascript
复制
class Sample:
  name = ''
  average = 0.0
  values = None # list cannot be initialized here!


s1 = Sample()
s1.name = "sample 1"
s1.values = []
s1.values.append(1)
s1.values.append(2)
s1.values.append(3)

s2 = Sample()
s2.name = "sample 2"
s2.values = []
s2.values.append(4)

for v in s1.values:   # prints 1,2,3 --> OK.
  print v
print "***"
for v in s2.values:   # prints 4 --> OK.
  print v
票数 85
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档