基类子类属性的使用案例 多个子类有部分相同的属性可参考

import pandas as pd


class DataGovernance:
    start_time = None
    end_time = None

    # 把共同的属性放在这里  只要调用一次就行了
    @classmethod
    def set_time_range(cls, start_time, end_time):
        cls.start_time = start_time
        cls.end_time = end_time

    def threshold_gover(self, df, col_name, min_, max_):
        print('Calling parent class threshold governance method')
        df = df[df['time'] <= self.end_time]
        filtered_df = df[(df[col_name] >= min_) & (df[col_name] <= max_)]
        return filtered_df


class PowerGovernance(DataGovernance):

    def __init__(self, use_cols):
        super().__init__()
        self.use_cols = use_cols

    def prepare_data(self, df):
        df = df[(df['time'] >= self.start_time) & (df['time'] <= self.end_time)]
        df = df[self.use_cols]
        return df

    def power_gover(self, df, pv_min, pv_max):
        df = self.prepare_data(df)
        df = self.threshold_gover(df, self.use_cols[1], pv_min, pv_max)
        return df


class WeatherGovernance(DataGovernance):

    def __init__(self, use_cols, data_type):
        super().__init__()
        self.use_cols = use_cols
        self.data_type = data_type

    def prepare_data(self, df):
        df = df[(df['time'] >= self.start_time)]
        df = df[self.use_cols]  # Use check_cols to filter columns
        return df

    def weather_gover(self, df, ghi_min, ghi_max):
        df = self.prepare_data(df)
        df = self.threshold_gover(df, self.use_cols[1], ghi_min,
                                  ghi_max)  # Assuming ghi is the first column in check_cols
        return df


if __name__ == '__main__':
    start_time, end_time = '2024-01-01 12:00:00', '2024-01-01 23:00:00'

    # 共同值的属性放这里 只要设置一次 子类实例化后可以通过self.属性名访问
    DataGovernance.set_time_range(start_time, end_time)

    # Assuming df_power and df_weather are defined somewhere
    df_power = pd.DataFrame({'time': pd.date_range(start=start_time, periods=24, freq='H'),
                             'pv': range(24)})  # Example dataframe, replace with your actual data

    df_weather = pd.DataFrame({'time': pd.date_range(start=start_time, periods=24, freq='H'),
                               'ghi': range(24)})  # Example dataframe, replace with your actual data

    # Example usage of PowerGovernance  子类不同的属性各自实例化的时候传入
    p_gover = PowerGovernance(['time', 'pv'])
    df_power_filtered = p_gover.power_gover(df_power, pv_min=3, pv_max=24)
    print(p_gover.use_cols)

    # Example usage of WeatherGovernance
    w_gover = WeatherGovernance(['time', 'ghi'], 'weather')
    df_weather_filtered = w_gover.weather_gover(df_weather, ghi_min=10, ghi_max=20)
    print(w_gover.use_cols)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值