在类中使用python方法检查变量在另一个类对象中是相同的

时间:2016-07-06 12:49:58

标签: python python-2.7 class inheritance methods

我有2个文件,我使用python类方法来解析数据并创建sql INSERT语句。在我的两个文件中,我都有一个基因名称列表。第一个文件是20个基因名称的简单列表,其中面板名称始终相同。第二个文件有关于基因的更多信息,每个基因名称将有多个条目。

我的代码目前看起来像:

class Gene(object):

    def __init__(self, gene):
        self.gene = gene

    def make_gene_sql(self):
        sql = """INSERT INTO gene ("""+"'"+self.gene+"', '"+panel+"')"
        return sql


class Variants(object):

    def __init__(self, gene, run_id, sample, variant):
        self.run_id = run_id
        self.sample = sample
        self.gene = gene
        self.variant = variant

    def make_vsr_sql(self):
        sql = "INSERT INTO variants_sample_run ("+ "'"+self.sample +"', '"+self.gene +"', '"+self.variant +"', '"+self.run_id+"')"
        return sql



gene_file = open(gene_path, 'r+')
for line in gene_file:
    gene_object = Gene(line.strip('\r\n'))
    gene_sql = gene_object.make_gene_sql()
    cursor.execute(gene_sql)


var_file = open(var_path, 'r+')
for line in var_file.readlines()[1:]:
    item = line.split('\t')
    sample = item[0]
    run = item[1]
    gene = item[2]
    variant = item[3]
    variants_object = Variants(gene, run, sample, variant)
    sql = variants_object.make_var_sql()
    cursor.execute(sql)

我的问题是:有没有办法让Variants类继承Gene类,并创建一个新函数来检查我的variants_object中的基因变量是否在genes_object中?我通过基因类传递我的变量,以确保我的var_file中的基因变量肯定在基因文件中?像这样的东西(但实际上有效!)?

class Variants(Gene):

    def __init__(self, gene, run_id, sample, variant):
        self.run_id = run_id
        self.sample = sample
        self.gene = gene.gene
        self.variant = variant

    def check_gene(gene):
        if self.gene not in gene.gene:
            print('Gene not correct')

    def make_vsr_sql(self):
        sql = "INSERT INTO variants_sample_run ("+ "'"+self.sample +"', '"+self.gene +"', '"+self.variant +"', '"+self.run_id+"')"
        return sql

我原本以为这可能会使用从包含所有基因的Gene类创建的列表,但是我不确定这是否是最好的方法呢?

2 个答案:

答案 0 :(得分:0)

class Variants(Gene):

def __init__(self, gene, run_id, sample, variant):
    self.run_id = run_id
    self.sample = sample
    self.gene = gene.gene
    self.variant = variant

def check_gene(gene):
    if self.gene not in gene.gene:
        print('Gene not correct')

答案 1 :(得分:0)

我认为继承可以帮助你解决这个问题。您可以尝试为所有Gene

创建一个类变量
class Gene(object):
    # The class variable that keeps track of all genes
    genes = []    

    def __init__(self, gene):
        Gene.genes.append(gene)
        self.gene = gene

您的Variants班级:

class Variants(Gene):
    def __init__(self, gene, run_id, sample, variant):
        self.run_id = run_id
        self.sample = sample
        self.gene = gene
        self.variant = variant

    def check_gene(gene):
        if self.gene not in Gene.gene:
            print('Gene not correct')