【问题标题】:Using a python method in a class to check variables are the same in another class object在一个类中使用python方法检查变量在另一个类对象中是否相同
【发布时间】:2016-07-06 12:49:58
【问题描述】:

我有 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 类,并创建一个新函数来检查我的 variables_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 类创建的列表,但是我不确定这是否是最好的方法?

【问题讨论】:

    标签: python python-2.7 class inheritance methods


    【解决方案1】:

    我不认为继承可以帮助您解决这个问题。你可以尝试为所有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')
    

    【讨论】:

      【解决方案2】:

      类变体(基因):

      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')
      

      【讨论】:

      • 我会尝试另一个
      • 解释如何解决问题。添加一些细节。
      猜你喜欢
      • 2011-06-02
      • 2017-09-28
      • 1970-01-01
      • 1970-01-01
      • 2022-10-19
      • 1970-01-01
      • 2016-02-29
      • 2010-11-16
      相关资源
      最近更新 更多