我有两个类-一个继承自另一个。我想知道如何转换到(或创建)子类的新变量。我四处搜索了一下,大多数情况下,像这样的“沮丧”似乎是不受欢迎的,还有一些稍微有点棘手的解决方法,比如设置实例。类-尽管这看起来不是一个好的方法。
子问题-沮丧真的那么糟糕吗?如果是,为什么?
我已经简化了下面的代码示例-基本上我有一些代码,在对x,y数据做了一些分析之后,创建了一个Peak对象。在这个代码之外,我知道数据是“PSD”数据功率谱密度-所以它有一些额外的属性。我如何从山顶下投到Psd_山顶?"""
Two classes
"""
import numpy as np
class Peak(object) :
"""
Object for holding information about a peak
"""
def __init__(self,
index,
xlowerbound = None,
xupperbound = None,
xvalue= None,
yvalue= None
):
self.index = index # peak index is index of x and y value in psd_array
self.xlowerbound = xlowerbound
self.xupperbound = xupperbound
self.xvalue = xvalue
self.yvalue = yvalue
class Psd_Peak(Peak) :
"""
Object for holding information about a peak in psd spectrum
Holds a few other values over and above the Peak object.
"""
def __init__(self,
index,
xlowerbound = None,
xupperbound = None,
xvalue= None,
yvalue= None,
depth = None,
ampest = None
):
super(Psd_Peak, self).__init__(index,
xlowerbound,
xupperbound,
xvalue,
yvalue)
self.depth = depth
self.ampest = ampest
self.depthresidual = None
self.depthrsquared = None
def peakfind(xdata,ydata) :
'''
Does some stuff.... returns a peak.
'''
return Peak(1,
0,
1,
.5,
10)
# Find a peak in the data.
p = peakfind(np.random.rand(10),np.random.rand(10))
# Actually the data i used was PSD -
# so I want to add some more values tot he object
p_psd = ????????????
编辑
谢谢你的贡献。。。。恐怕我有点沮丧(格迪?)因为到目前为止的答案似乎表明我花时间对从一个类类型到另一个类类型的转换器进行硬编码。我已经想出了一种更自动的方法来实现这一点——基本上是循环遍历类的属性并将它们彼此传递。这对人们来说是什么味道——这是一件合理的事情吗——还是意味着前方会有麻烦?def downcast_convert(ancestor, descendent):
"""
automatic downcast conversion.....
(NOTE - not type-safe -
if ancestor isn't a super class of descendent, it may well break)
"""
for name, value in vars(ancestor).iteritems():
#print "setting descendent", name, ": ", value, "ancestor", name
setattr(descendent, name, value)
return descendent