title: Class constant dictionary in Python
body: <p>I'm building a module that has a class variable dictionary:</p>
  
  <pre><code>class CodonUsageTable:
          CODON_DICT={'TTT': 0, 'TTC': 0, 'TTA': 0, 'TTG': 0, 'CTT': 0,
          'CTC': 0, 'CTA': 0, 'CTG': 0, 'ATT': 0, 'ATC': 0,
          'ATA': 0, 'ATG': 0, 'GTT': 0, 'GTC': 0, 'GTA': 0,
          'GTG': 0, 'TAT': 0, 'TAC': 0, 'TAA': 0, 'TAG': 0,
          'CAT': 0, 'CAC': 0, 'CAA': 0, 'CAG': 0, 'AAT': 0,
          'AAC': 0, 'AAA': 0, 'AAG': 0, 'GAT': 0, 'GAC': 0,
          'GAA': 0, 'GAG': 0, 'TCT': 0, 'TCC': 0, 'TCA': 0,
          'TCG': 0, 'CCT': 0, 'CCC': 0, 'CCA': 0, 'CCG': 0,
          'ACT': 0, 'ACC': 0, 'ACA': 0, 'ACG': 0, 'GCT': 0,
          'GCC': 0, 'GCA': 0, 'GCG': 0, 'TGT': 0, 'TGC': 0,
          'TGA': 0, 'TGG': 0, 'CGT': 0, 'CGC': 0, 'CGA': 0,
          'CGG': 0, 'AGT': 0, 'AGC': 0, 'AGA': 0, 'AGG': 0,
  
  #Other code
  
          def __init__(self,seqobj):
                  '''Creates codon table for a given Bio.seq object.i
                  The only argument is Bio.Seq object with DNA
                  Currently assumes seq to be DNA, RNA support to be added later'''
                  dnaseq=str(seqobj)
                  self.usage_table=CodonUsageTable.CODON_DICT.deepcopy()#instance of table
  </code></pre>
  
  <p>The last line must make a copy of class dictionary to store instance data in it, but it throws</p>
  
  <pre><code>Traceback (most recent call last):
    File "&lt;stdin&gt;", line 1, in &lt;module&gt;
    File "./codon_usage.py", line 47, in __init__
      self.usage_table=CodonUsageTable.CODON_DICT.deepcopy()#instance of codon usage table
  NameError: global name 'CODON_DICT' is not defined
  </code></pre>
  
  <p>So does <code>self.CODON_DICT</code>, <code>CODON_DICT</code> or <code>codon_usage.CodonUsageTable.CODON_DICT</code>, when called from <code>__init__</code>. Dictionary is defined:</p>
  
  <pre><code>&gt;&gt;&gt;import codon_usage
  &gt;&gt;&gt; codon_usage.CodonUsageTable.CODON_DICT
  {'GCT': 0, 'GGA': 0, 'TTA': 0, 'GAT': 0, 'TTC': 0, 'TTG': 0, 'AGT': 0, 'GCG': 0, 'AGG': 0, 'GCC': 0, 'CGA': 0, 'GCA': 0, 'GGC': 0, 'GAG': 0, 'GAA': 0, 'TTT': 0, 'GAC': 0, 'TAT': 0, 'CGC': 0, 'TGT': 0, 'TCA': 0, 'GGG': 0, 'TCC': 0, 'ACG': 0, 'TCG': 0, 'TAG': 0, 'TAC': 0, 'TAA': 0, 'ACA': 0, 'TGG': 0, 'TCT': 0, 'TGA': 0, 'TGC': 0, 'CTG': 0, 'CTC': 0, 'CTA': 0, 'ATG': 0, 'ATA': 0, 'ATC': 0, 'AGA': 0, 'CTT': 0, 'ATT': 0, 'GGT': 0, 'AGC': 0, 'ACT': 0, 'CGT': 0, 'GTT': 0, 'CCT': 0, 'AAG': 0, 'CGG': 0, 'AAC': 0, 'CAT': 0, 'AAA': 0, 'CCC': 0, 'GTC': 0, 'CCA': 0, 'GTA': 0, 'CCG': 0, 'GTG': 0, 'ACC': 0, 'CAA': 0, 'CAC': 0, 'AAT': 0, 'CAG': 0}        'GGT': 0, 'GGC': 0, 'GGA': 0, 'GGG': 0}
  </code></pre>