クラスの異なるインスタンス間でデータを共有したいが、クラスが初めて作成されたときにデータを外部に渡す必要がある。initに渡される引数を使用してクラス変数を1回だけ初期化する方法
私は以下のスニペットを書いています。
動作しているようですclass Foo(object):
_config = False
eggs = None
def __init__(self, spam, eggs=None):
if Foo._config:
# Assume initialized and eggs exists
print(Foo.eggs)
else:
if eggs is None:
raise ValueError('eggs must be provided the first time')
else:
Foo.eggs = eggs
Foo._config = True
print("Scrambled {}?".format(Foo.eggs))
self.spam = spam
print("Class variable - eggs: {}".format(Foo.eggs))
print("Instance variable - spam: {}".format(self.spam))
...
>>>Foo._config
False
>>>a = Foo('chicken', 'eggs')
Scrambled eggs?
Class variable - eggs: eggs
Instance variable - spam: chicken
>>>Foo._config
True
2回目はエラーと共有変数のクラスを上げていない
>>>b = Foo('duck')
eggs
Class variable - eggs: eggs
Instance variable - spam: duck
私の質問はこれがあるかどうかであります良いアプローチ?私は__init__
のものを一度だけ呼び出されるものを含むことは悪い考えであり、私はメタクラスを使うべきであるというこの質問を見ましたか?
私の正当な理由は、の卵には、実際には各インスタンスで繰り返さない非常に大きなパンダのデータフレームが含まれているということです。
は、なぜあなたはちょうど同じ正確な大きなパンダのデータフレームを初期化しませんか?参照のコストはごくわずかです。 –
クラスのすべてのインスタンスが同じパンダデータフレームを共有するようにしますか? 1つのインスタンスから変更すると、すべてが変更されますか? – Erich
@ juanpa.arrivillaga私の無知を許してください。しかし、データフレームが 'df'の場合、' __init__'の中で 'self.df = df'を呼び出すと毎回同じデータフレームを参照しますか? – drstevok