python向下_如何在python中向下转换

我有两个类-一个继承自另一个。我想知道如何转换到(或创建)子类的新变量。我四处搜索了一下,大多数情况下,像这样的“沮丧”似乎是不受欢迎的,还有一些稍微有点棘手的解决方法,比如设置实例。类-尽管这看起来不是一个好的方法。

子问题-沮丧真的那么糟糕吗?如果是,为什么?

我已经简化了下面的代码示例-基本上我有一些代码,在对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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值