Python子类属性赢得';t初始化
我正在构建一个子类,该子类继承自xarray Dataset类,但我希望使用xarray open_Dataset函数返回实例。原因是xarray的open_数据集可以链接到大型数据集,而无需像手动初始化数据集实例时那样将它们加载到内存中。我不想修改这个函数,所以为了避免这个问题,我修改了Dataset的“new”方法,以返回我自己的类,如下所示Python子类属性赢得';t初始化,python,class,inheritance,python-xarray,Python,Class,Inheritance,Python Xarray,我正在构建一个子类,该子类继承自xarray Dataset类,但我希望使用xarray open_Dataset函数返回实例。原因是xarray的open_数据集可以链接到大型数据集,而无需像手动初始化数据集实例时那样将它们加载到内存中。我不想修改这个函数,所以为了避免这个问题,我修改了Dataset的“new”方法,以返回我自己的类,如下所示 def open_dataset(nc_file, data_type): data_objs = { "my_cl
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_方法
class MyClass(xr.Dataset)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.my_attribute = 1
print("in the init")
def my_method(self):
print("hello!")
但是,这些实例没有初始化my_属性。我已经通过添加一个print语句检查了“init”正在执行,并且我得到了一个打印输出。因此,我不明白为什么这个init中的属性没有初始化。如何调用方法和属性?您能显示代码吗?简单地替换
Dataset
,即导入xarray.core.Dataset,不是更容易吗;xarray.core.dataset.dataset=MyClass。这不需要任何\uuuuuuuuuuuuuuuuuuuu
黑客。顺便问一下,为什么不将*args、**kwargs
传递到\uuuuuuuuuuu
中?如何调用方法和属性?您能显示代码吗?简单地替换Dataset
,即导入xarray.core.Dataset,不是更容易吗;xarray.core.dataset.dataset=MyClass。这不需要任何\uuuuuuuuuuuuuuuuuuuu
黑客。顺便问一下,你为什么不把*args、**kwargs
传递到\uuuuuuu新的\uuuuu
?