擅长:python、mysql、java
<p>我认为,以Python的方式,与C-struct最接近的类比应该是具有命名属性的Python对象。你知道吗</p>
<p>繁琐的方式:</p>
<pre><code>class mystruct:
def __init__(self):
self.FIELD1 = None
self.FIELD2 = None
self.FIELD3 = None
x = mystruct()
x.FIELD1 = 42
x.FIELD3 = "aap"
</code></pre>
<p>可以使用<code>type</code>函数生成具有多个属性的匿名对象:</p>
<pre><code>y = type('', (), {'FIELD1': None, 'FIELD2':None})()
y.FIELD1 = 42
</code></pre>
<p>但这仍然很麻烦。但这可以通过编写一个返回函数的函数来简单地概括,该函数将创建一个对象的实例。你知道吗</p>
<pre><code># 'objmaker' takes a list of field names and returns a function
# which will create an instance of an object with those fields, their
# values initially set to None
objmaker = lambda *fields: type('', (), {field: None for field in fields})
# Now it's trivial to define new 'structs' - here we 'define' two
# types of 'structs'
mystruct_maker = objmaker('FIELD1', 'FIELD2', 'FIELD3')
yourstruct_maker = objmaker('x', 'y')
# And creating instances goes like this:
my_str1 = mystruct_maker()
my_str2 = mystruct_maker()
yr_str = yourstruct_maker()
yr_str.x = 42
my_str1.FIELD1 = yr_str.x
</code></pre>