Python子类属性不会初始化

问题描述

我正在构建一个继承自 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 (将#修改为@)