2016-07-06 12 views
0

私はPythonクラスのメソッドを使用してデータを解析し、S​​QL INSERT文を作成しています。両方のファイルに遺伝子名のリストがあります。最初のファイルは、パネル名が常に同じ20の遺伝子名の単純なリストです。 2番目のファイルには遺伝子に関する詳細情報があり、各遺伝子名には複数のエントリがあります。クラス内のPythonメソッドを使用して、変数をチェックする変数は別のクラスオブジェクトと同じです

のように現時点では私のコードが見えます:私の質問がある

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_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 

私は、これはおそらく、しかし、私はこれはこれを行うための最善の方法であるかどうかわからないんだけど、全ての遺伝子を含む遺伝子クラスから作成されたリストを使用することができます考えていましたか?

答えて

0

クラスバリアント(ジーン):私は、継承はこの1つのお手伝いをすることができるとは思わない

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

は、コードが与えられたことはありませんか?彼はそれがうまくいかないと言った。 –

+0

もう1つ試してみる –

+0

これがどのように問題を解決できるかを説明してください。いくつかの詳細を追加します。 – Jay

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') 
関連する問題