Я очень новичок в объектно-ориентированном программировании, и у меня возникают проблемы с тем, как управлять связью между классами, у которых есть связанные данные.Методы вызова с использованием родительского класса
Я пытаюсь представить некоторую геномную информацию о серии организмов, которые я в конечном итоге собираюсь сравнить. Таким образом, у меня есть 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
, это кажется излишним.
Я даже не уверен, где для начала - я довольно много искал, но другие вопросы, которые я нашел, либо не актуальны, либо я недостаточно понимаю, чтобы понять Леванс.
Имеет ли каждый экземпляр '' 'Species''' уникальное имя? – wwii
Как примечание стороны. Никогда не используйте изменяемые объекты в качестве аргументов по умолчанию. Если вам необходимо предоставить изменяемый аргумент по умолчанию, выполните следующие действия. 'def __init __ (self, species_name, genes = None, contigs = None):' и 'self.genes = гены, если гены не являются None else {}'. – Dunes
@wwii да, каждый вид уникален. Могут быть гены, имена которых одинаковы, но их locus_tag будет уникальным. – kevbonham