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

Python 中的 NetCDF4 和多重继承

如何解决Python 中的 NetCDF4 和多重继承

我正在尝试编写一个继承自 netCDF4.Dataset 的类和另一个允许向前者添加功能的抽象类。不幸的是,当我尝试通过我的这个新类打开一个实际的 netcdf 文件时,我收到错误NetCDF: Write to read only”(在 self.filename = filename__init__ 中的第 Meteo 行) :

import abc
from netCDF4 import Dataset

filename = 'data.nc'

class Meteo(abc.ABC):

    def __init__(self,filename):
        self.filename = filename

    @abc.abstractmethod
    def get_pressure(self):
        pass

class Meteodata(Meteo,Dataset):

    def __init__(self,filename:str,mode:str):
        Dataset.__init__(self,filename,mode)
        Meteo.__init__(self,filename)

    def get_pressure(self):
        return 1025.

with Meteodata(filename,'r') as md:
    print(md.get_pressure())

我知道代码想要将新属性 self.filename 写入 Dataset 对象,该对象仅在“read”模式下打开,从而引发异常。尽管如此,我认为这些修改 (self.filename = filename) 只发生在另一个类中。我也许可以不在 Meteo 类中定义属性,而只继续使用方法,但它会有所帮助。

这是我第一次尝试这样的事情,所以我已经阅读了一些关于 Python 中的多重继承(例如 MRO),但据我所知,它似乎不是这样的(至少据我了解...)

感谢您的帮助。

PS:我想这样做的原因如下:我目前正在使用某种类型的 netCDF 格式 (WRF-ARW) 的气象数据,我正在编写后处理函数来对其进行计算.这些计算只需要访问 Meteo 抽象类中定义的数据,但我仍然希望在处理它时能够访问整个文件(因此是多重继承)。最终,我想将来自任何其他模型的任何类型的气象数据输入到这些计算中,当然这些数据很可能以其他格式存储。我只需要为它编写正确的实现,例如 Meteodata2(Meteo,h5py.File) 如果该新模型的输出数据格式恰好是 HDF5 文件

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。