我想分享跨类的不同实例的数据参数,但数据必须由外部提供的第一次创建的类。如何初始化类变量只使用一次传递给init
我已经写了下面的代码片段。
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
和第二时间不会引发错误和股票类变量
>>>b = Foo('duck')
eggs
Class variable - eggs: eggs
Instance variable - spam: duck
我的问题是,这是否是一个好方法?我已经看到这个问题,这表明包含__init__
这些只被调用一次的东西是一个坏主意,我应该使用一个元类?
我的理由是,鸡蛋实际上将包含一个非常大的熊猫数据框,我不想重复每个实例。
你为什么不只是完全相同的大型熊猫数据帧初始化?参考的成本可以忽略不计。 –
您是否希望班级的所有实例共享相同的熊猫数据框,例如:从一个实例修改它会修改所有? – Erich
@ juanpa.arrivillaga请原谅我的无知,但如果数据帧是'df'然后调用'self.df = df'内'__init__'每次都会引用同一个数据帧? – drstevok