我构建了两个名为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))
任何人都知道如何正确实施?提前谢谢。
答案 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)