我对面向对象的编程非常陌生,在解决如何管理具有相关数据的类之间的关系时遇到了麻烦。

我试图代表一些有关一系列生物的基因组信息,最终我将要进行比较。所以我有一个Species类:

class Species(object):
    def __init__(self, species_name, genes={}, contigs={}):
        self.species_name = species_name
        self.genes = genes
        self.contigs = contigs


然后我想有一个Gene类,

class Gene(object):
    def __init__(self, locus_tag, annotation, dna_seq, aa_seq):
        self.locus_tag = locus_tag
        self.annotation = annotation
        self.dna_seq = dna_seq
        self.aa_seq = aa_seq


这个想法是genesSpecies方法将是Gene对象的字典,其中键是locus_tagGene。我想我知道如何实现这一部分。

但是我想做的一件事就是在Gene对象上调用一个函数,该函数需要知道它所在的Species(它将输出包含species_namelocus_tag的文件结构,但是它们来自两个不同的类,我想到的最简单的方法是直接在species_name类中添加一个Gene,但是由于每个Gene都位于一个Species中,因此这似乎是多余的。

我什至不知道从哪里开始-我做了很多搜索,但是我发现的其他问题要么无关紧要,要么我不够理解相关性。

最佳答案

创建Gene对象,然后通过传递Species字典来创建genes对象,然后通过为其设置Gene实例来更新Species对象,如下所示:

for gene in genes:
    gene.species = species


之后,每个Gene实例(gene)可以通过执行Species或例如self.species来获取其名称来引用其self.species.species_name对象。

10-07 20:46