我对面向对象的编程非常陌生,在解决如何管理具有相关数据的类之间的关系时遇到了麻烦。
我试图代表一些有关一系列生物的基因组信息,最终我将要进行比较。所以我有一个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
这个想法是
genes
的Species
方法将是Gene
对象的字典,其中键是locus_tag
的Gene
。我想我知道如何实现这一部分。但是我想做的一件事就是在
Gene
对象上调用一个函数,该函数需要知道它所在的Species
(它将输出包含species_name
和locus_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
对象。