2017-03-06 9 views
0

私はC言語のように、Pythonで構造体を作成したいと思います。私はこれのためにnamedtuple()を使用しようとしました。しかし、私はカスタム構造内で記述した変数の値を更新することはできません。namedtuple()構造体内の変数の値を更新する

from collections import namedtuple as nt 
Struct = nt('Struct','all left right bottom top near far') 

そして、これは私がこの方法でやろうとしていますものです::

class codeClip: 
    def compOutCode(x,y,z,xmin,xmax,ymin,ymax,zmin,zmax): 
     code = Struct(0,0,0,0,0,0,0) 
     if(y > ymax): 
      code.top = 1 
      code.all += code.top 
     elif(y < ymin): 
      code.bottom = 1    
     return code 

それがこのエラーを与えているしかし:

code.top = 1 AttributeError: can't set attribute

何ここ は、私はそれを宣言した方法です私はする必要がありますか? Pardon私、私はかなりPythonで新しく、まだこれらのすべてに慣れています。

+2

可能な重複[namedtuplesのリストの値を変更](http://stackoverflow.com/questions/31252939/changing-values-of-a-list-of-namedtuples) – AKS

答えて

0

_replace()メソッドを使用できます。

code.top = 1の代わりに、次のように値を更新できます。

code = code._replace(top = 1) 

に注意してください、という名前のタプルは不変であるので、あなたはそれらを操作することはできません。変更可能なものをお望みなら、recordtypeを使うことができます。

参考:のhttps://stackoverflow.com/a/31253184/5352399

+0

質問に答えたSOの投稿を参照している場合は、同じ投稿を参照してこの質問に重複して表示/フラグを立てるのはなぜですか? – AKS

+0

@AKS良い点、私は最初に参照のポストに気付かなかった。後で私は、その投稿が有用だと思っているので、その参考投稿にタグを付ける私の答えを編集しました。しかしそれ以前に私はすでに回答を掲示し、それを削除しなかった。また、名前付きタプルに関連するいくつかの質問がありますが、すべての質問がこの質問に似ています。だから、私が参照しているものを見つけるのはいつかかかりました。 –

+0

@downvoter downvoted私は重複として投稿をフラグしなかったので? –

関連する問題