如何在类属性中迭代?

2024-06-01 08:40:31 发布

您现在位置: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的名称,因此我想我可以使用一个类并为它创建属性“name”。你知道吗

问题是,当然一个类是不可编辑的,所以我试着自身otiterable但是还没有成功,Python只返回TypeError: 'builtin_function_or_method' object is not iterable。你知道我怎样才能做到这一点,或者只是让整个代码更加优雅和流畅吗?你知道吗


Tags: nameinselfforifparsedefline