2015-12-09 50 views
-2

你好同胞社區,Python:類變量沒有更新

我不明白這裏的問題,因此想從你身邊有一些輸入。

這裏是我的代碼:

from collections import defaultdict 

class peptide(): 

    aa_lib={ 
     'A': {'H': 5, 'C': 3, 'O': 1, 'N': 1}, 
     'C': {'H': 5, 'C': 3, 'S': 1, 'O': 1, 'N': 1}, 
     'D': {'H': 5, 'C': 4, 'O': 3, 'N': 1}, 
     'E': {'H': 7, 'C': 5, 'O': 3, 'N': 1}, 
     'F': {'H': 9, 'C': 9, 'O': 1, 'N': 1}, 
     'G': {'H': 3, 'C': 2, 'O': 1, 'N': 1}, 
     'H': {'H': 7, 'C': 6, 'N': 3, 'O': 1}, 
     'I': {'H': 11, 'C': 6, 'O': 1, 'N': 1}, 
     'K': {'H': 12, 'C': 6, 'N': 2, 'O': 1}, 
     'L': {'H': 11, 'C': 6, 'O': 1, 'N': 1}, 
     'M': {'H': 9, 'C': 5, 'S': 1, 'O': 1, 'N': 1}, 
     'N': {'H': 6, 'C': 4, 'O': 2, 'N': 2}, 
     'P': {'H': 7, 'C': 5, 'O': 1, 'N': 1}, 
     'Q': {'H': 8, 'C': 5, 'O': 2, 'N': 2}, 
     'R': {'H': 12, 'C': 6, 'N': 4, 'O': 1}, 
     'S': {'H': 5, 'C': 3, 'O': 2, 'N': 1}, 
     'T': {'H': 7, 'C': 4, 'O': 2, 'N': 1}, 
     'V': {'H': 9, 'C': 5, 'O': 1, 'N': 1}, 
     'W': {'C': 11, 'H': 10, 'N': 2, 'O': 1}, 
     'Y': {'H': 9, 'C': 9, 'O': 2, 'N': 1}, 
     'H-': {'H': 1}, 
     '-OH': {'O': 1, 'H': 1} 
    } 

    def __init__(self,sequence,rtime,intensity,protein): 
     self.sequence=sequence 
     self.carbon_atoms=0 
     self.nitrogen_atoms=0 
     self.hydrogen_atoms=0 
     self.sulfur_atoms=0 
     self.oxygen_atoms=0 

     self.rt=rtime 
     self.intensity=intensity 
     self.protein=protein 
     #self.charge=charge 

    def sumForm(self, aa_lib): 
     atom_comp = defaultdict(int) 
     for aa in self.sequence: 
      if aa in aa_lib.keys(): 
       for atom, count in aa_lib[aa].items(): 
        atom_comp[atom]+=count 
     self.carbon_atoms=atom_comp['C'] 
     self.nitrogen_atoms=atom_comp['N'] 
     self.hydrogen_atoms=atom_comp['H'] 
     self.sulfur_atoms=atom_comp['S'] 
     self.oxygen_atoms=atom_comp['O'] 

test=peptide("FKDDLA", 2.5, 2E+7, "OmpF") 
test.sumForm 

我不明白爲什麼不更新的原子。 init值(0)仍然保留,而不是更新的值。在課外,我可以讓它工作。

+3

你什麼時候運行'sumForm'? – lejlot

+0

抱歉,我忘了添加它。我正在運行它,像這樣:test.sumForm – Fourier

+0

你沒有*調用*'sumForm'! – user2357112

回答

2

你有兩個問題:

  1. 你永遠不調用該方法,你需要test.sumForm()
  2. 你的方法需要你不傳遞參數

您可以做test.sumForm(peptide.aa_lib),也可以修改你的方法直接讀取從類變量,像這樣:

def sumForm(self): # note, no more aa_lib here 
    atom_comp = defaultdict(int) 
    for aa in self.sequence: 
     if aa in peptide.aa_lib.keys(): # peptide.aa_lib 
      for atom, count in peptide.aa_lib[aa].items(): 
       atom_comp[atom]+=count 
    self.carbon_atoms=atom_comp['C'] 
    self.nitrogen_atoms=atom_comp['N'] 
    self.hydrogen_atoms=atom_comp['H'] 
    self.sulfur_atoms=atom_comp['S'] 
    self.oxygen_atoms=atom_comp['O'] 

您應該修改呼叫或修改方法。不要這樣做(否則你會有一整套新的錯誤)。

+0

非常感謝。這是我的第一次嘗試,我顯然不完全理解如何稱呼它。 – Fourier