问题描述
我正在构建一个继承自 xarray Dataset 类的子类,但我希望使用 xarray open_dataset 函数来返回实例。这样做的原因是 xarray 的 open_dataset 可以链接到大型数据集,而无需像手动初始化 Dataset 实例时那样将它们加载到内存中。我不想修改这个函数,所以为了解决这个问题,我修改了 Dataset 的“新”方法以返回我自己的类,如下所示。
def open_dataset(nc_file,data_type):
data_objs = {
"my_class": MyClass,}
obj = data_objs[data_type]
def __new__(cls,*args,**kwargs):
if cls == xr.Dataset:
return object.__new__(obj)
return object.__new__(cls)
xr.Dataset.__new__ = staticmethod(__new__)
obj = xr.open_dataset(nc_file)
return obj
然后我可以如下定义我的类,并且能够成功地从 open_dataset 函数获取 MyClass 实例,这些实例具有可访问和可用的 my_method 方法。
class MyClass(xr.Dataset)
def __init__(self,**kwargs):
super().__init__(*args,**kwargs)
self.my_attribute = 1
print("in the init")
def my_method(self):
print("hello!")
但是,实例没有初始化 my_attribute。我通过添加一个打印语句来检查“init”正在执行,并且我确实得到了打印输出。因此我不明白为什么这个 init 中的属性没有被初始化。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)