Python中的类常量字典
我正在构建一个模块,其中有一个类变量字典:
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
最后一行必须复制这个类字典,以便在其中存储实例数据,但它抛出了一个错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
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
所以在从 __init__
调用时,无论是 self.CODON_DICT
、CODON_DICT
还是 codon_usage.CodonUsageTable.CODON_DICT
,都会出现问题。字典是这样定义的:
>>>import codon_usage
>>> 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}
1 个回答
4
根据症状来看,事情大概是这样的:
- 你写了一个文件并保存了它;
- 你打开了Python的命令行;
- 你发现
CODON_DICT
不能直接访问,于是你解决了这个问题; - 你在同一个Python命令行里再次尝试调用,结果却出现了错误。
出现这个问题是因为Python仍然在使用旧版本的模块,这个模块是在你导入的时候加载的。虽然它显示的是新文件的内容,但内存中只存有字节码和一些元数据,出错时它还得去查硬盘。如果你想在不重启命令行的情况下使用最新的更改,可以运行:
>>> reload(codon_usage)
然后再试一次。
(顺便提一下:dict
没有deepcopy
这个方法,这个功能来自copy
模块。不过这里用dict.copy
就足够了。)