如何在类属性中进行迭代?

时间:2019-12-22 13:13:30

标签: python

所以,我有这段代码

import itertools


def parse_dssp(dsspfile):
        dssp={}
        fdssp=open(dsspfile)
        c=0
        for line in fdssp:
                if line.find('  #  RESIDUE')==0:
                        c=1
                        continue
                if c==1:
                        ch=line[11]
                        num=line[5:10].strip()
                        res=line[13]
                        ss=line[16]
                        if ss==' ':ss='C'
                        el=(ch,num,res,ss)
                        asa=float(line[35:38].strip())
                        phi=float(line[103:109].strip())
                        psi=float(line[109:115].strip())
                        dssp[el]=[asa,phi,psi]
        return dssp


def interaction_surface(mono1,mono2,comp):
        count_trimer=sum([mono2.ot[i][0] for i in mono2 if i[0]==mono1.name])
        count_comp=sum([comp[i][0] for i in comp if i[0]==mono1.name])
        return abs(count_trimer-count_comp)


class monomer:
        def __init__(self,name,monomer,opposite_trimer):
                self.mono=monomer
                self.name=name
                self.ot=opposite_trimer
        def __iter__(self):
                for each in self.ot.keys():
                        yield self.ot.__getattribute__(each)


A=monomer('A',parse_dssp('A.dssp'),parse_dssp('BCD.dssp'))
B=monomer('B',parse_dssp('B.dssp'),parse_dssp('ACD.dssp'))
C=monomer('C',parse_dssp('C.dssp'),parse_dssp('ABD.dssp'))
D=monomer('D',parse_dssp('D.dssp'),parse_dssp('ABC.dssp'))
ABCD=parse_dssp('ABCD.dssp')
chains=[A,B,C,D]


mono=[A,B,C,D]
for m1,m2 in itertools.combinations(mono, 2):
        print(interaction surface(m1,m2,ABCD))

我需要解析DSSP文件并获得分子中各种单体之间的相互作用表面。在函数interaction_surface(mono1,mono2,comp)中,我需要查看每个复合物中正在分析的单体的名称(i[0])是否与mono1的名称相对应,因此我认为我可以使用一个类并创建属性“名称”。

这个问题是,当然,一个类是不可迭代的,所以我试图使self.ot成为可迭代的,但是还没有成功,Python只返回TypeError: 'builtin_function_or_method' object is not iterable。关于如何实现这种效果,或者只是使整个代码更优雅,更容易流动的任何想法?

0 个答案:

没有答案