我爲什麼下面的代碼不起作用困惑:嵌套繼承的問題 - 如何初始化父類?
class ComparativeAnnotatorConfiguration(HashableNamespace):
"""
Takes the initial configuration from the main driver script and builds paths to all files that will be produced
by these tasks.
"""
def __init__(self, args, gene_set, query_genome_files, target_genome_files, annot_files, transmap):
self.work_dir = os.path.join(args.workDir, 'comparativeAnnotator', gene_set.sourceGenome, gene_set.geneSet)
self.metrics_dir = os.path.join(args.outputDir, 'metrics')
self.tx_set_dir = os.path.join(args.outputDir, 'tm_transcript_set')
self.reference = self.Reference(args, query_genome_files, annot_files, self.work_dir)
self.transmap = self.TransMap(args, query_genome_files, target_genome_files, annot_files, transmap, self.work_dir)
class Reference(HashableNamespace):
"""
The args object that will be passed directly to jobTree
"""
def __init__(self, args, query_genome_files, annot_files, out_dir):
self.__dict__.update(vars(args.jobTreeOptions))
self.outDir = out_dir
self.refGenome = query_genome_files.genome
self.refFasta = query_genome_files.genome_fasta
self.sizes = query_genome_files.chrom_sizes
self.annotationGp = annot_files.gp
self.gencodeAttributes = annot_files.attributes
self.mode = 'reference'
class TransMap(Reference):
"""
The args object that will be passed directly to jobTree
"""
def __init__(self, args, query_genome_files, target_genome_files, annot_files, transmap, out_dir):
super(self.__class__, self).Reference.__init__(self, args, query_genome_files, annot_files, out_dir)
self.genome = target_genome_files.genome
self.psl = transmap.psl
self.refPsl = annot_files.psl
self.targetGp = transmap.gp
self.fasta = target_genome_files.fasta
self.mode = 'transMap'
試圖實例化導致的錯誤:
AttributeError: 'super' object has no attribute 'Reference'
我已經嘗試了不同的版本,如super(TransMap, self).Reference.__init__
和Reference.__init__
,但所有給不同版本的NameError
。如何比這裏列出的簡單的情況下,這種不同:
Using super() in nested classes
'超(個體經營.__ class__,個體經營)。 __init__ ...'應該足夠了。 'super'的結果已經是'Reference' – fjarri
不,不要將'self____ class__'傳遞給'super()'。如果你將這個類繼承下來,它會變得糟糕。 – Kevin
你有沒有試過這個超級(TransMap,self).__ init __(#你的arg) – dlmeetei