迭代给定父类中的某些子类方法

时间:2018-03-16 16:04:32

标签: python class parent-child

我构建了两个名为zero_coupon_bond和coupon_bond的类,它们都有一个名为Create_random_asset的方法,它为两个产品生成随机数据属性(notionals,start_date,end_date,Riskdate等),并在数据帧中返回该数据(带有n)行)。现在我想写一个叫做的课 product_collection,它继承了这两个类并迭代了两个子类(会有更多的产品,这就是为什么我想用迭代来做),并使用create_random_asset方法为每个子类返回那些数据帧。在代码中:

class zero_coupon_bond():

    def __init__(self):
        ..........


    def create_random_asset(self,n):
        .....
        return pd.DataFrame(OrderedDict(self.columns))

class coupon_bond():

    def __init__(self):
        ..........

    def create_random_asset(self,n):
        .....
        return pd.DataFrame(OrderedDict(self.columns))

然后我正在寻找类似的东西:

class product_collection(zero_coupon_bond,coupon_bond):

    def __init__(self,n,k):
        self.n=n
        self.k=k
        self.df="empty dateframe"


    def random_data(self,n,amount_products):

               for product in childclass:
                    df.append(childclass.create_random_asset(n))

任何人都知道如何正确实施?提前谢谢。

1 个答案:

答案 0 :(得分:1)

根据您在问题中提供的内容,您的product_collection课程不应继承(也不是您的优惠券类别的祖先)。相反,它应该尽可能地与coupon_bond类分离。也就是说,它应该能够识别并迭代实现方法create_random_asset的任何对象。

product_collection类可以管理其元素类型为list的内部集合(可能是coupon_bond)。

然后您的random_data方法可以像这样实现:

class product_collection():
    def __init__(self):
        self.products = []

    # ...

    def random_data(self):
        df = # empty dataframe
        for p in self.products:
            df.append(p.create_random_asset())
        return df

要向产品系列添加不同的产品,您可以在add_product中实施product_collection方法,只需将coupon_bond实例附加到内部产品列表中。

def add_prodct(self, product):
    assert product
    self.products.append(product)