微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python子类属性不会初始化

如何解决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 举报,一经查实,本站将立刻删除。