2016-10-01 9 views
0

Pythonでクラスについて質問があります。私は次のようなクラスを作成しています。クラス内のグローバル変数をクラス変数に代入

class Model(Object): 

    __table__ = 'table_name' 

    def func(): 

    def func2(): 

テーブル名は、関数が提供するグローバル変数です。古い情報を追加しようとしているので、古い情報から記入しているかどうかによってテーブル名を変更したいので、これは私が試したものです。

if backfill: 
    model = Model(True).func() 
else: 
    model = Model.func() 

は、その後、私は、私はクラス定義の外からself.backfill呼び出すことはできませんので、これは動作しません実現:

class Model(Object): 

    def __init__(self, backfill = False): 
     self.backfill = backfill 

    if self.backfill: 
     __table__ = 'table_name' 
    else: 
     __table__ = 'table_name2' 

    def func(): 

    def func2(): 

最終呼び出しは、このようなものになるだろう。私は定義を作成し、それをクラスの中で呼び出そうと試みていましたが、それはどちらもうまくいかなかったのです。

私の質問は:

  1. は、クラス変数からクラス内のグローバル変数を初期化する方法はありますか?あるいは、これを一般的に行うより良い方法がありますか?
+0

:あなただけ__init__方法でそれを定義することができますか? – Li357

+0

あなたはhttp://stackoverflow.com/questions/423379/using-global-variables-in-a-function-other-than-theone-that-c​​reated-themを見ましたか – WookieCoder

+0

'__table__'は*グローバル変数*。 'Model'クラスの属性です。 – zvone

答えて

1

__table__は、インスタンスまたはクラス自体からアクセスできるクラス変数です。あなたは__init__方法でbackfillの値に応じて任意のインスタンス値を更新することができます。

class Model(Object): 
    __table__ = 'table_name' 
    def __init__(self, backfill = False): 
     self.backfill = backfill 
     if self.backfill: 
      self.__table__ = 'table_name2' 

次に該当する場合/ else文なしに、単にコンストラクタにbackfillパラメータを与えて、インスタンスを作成するには:

print(Model.__table__) 
# table_name 
backfill = True 
model = Model(backfill) 
print(model.__table__) 
# table_name2 

しかし、私はあなたのケースではクラス変数を使用する点はありません。あなたは「のオフフィード」によって何を意味するのか明確にすることができます - テーブル名が関数が*のオフ養うことをグローバル変数である*

class Model(Object): 
    def __init__(self, backfill = False): 
     self.backfill = backfill 
     self.__table__ = 'table_name' 
     if self.backfill: 
      self.__table__ = 'table_name2' 
+0

ありがとうフロドン!これはまさに私が探していたものです。私はオブジェクト指向のプログラミングが初めてだから、正確に何を望んでいたのかを明確にすることはできませんでしたが、あなたはそれを回避することができました!ありがとう! – RDizzl3

関連する問題