python - Python 类和继承。调用超级方法返回错误
问题描述
我有以下python代码。该代码分析用于放大处理的数字信号,但是由于某种原因,我无法将继承概念应用于此。
我有一个父类和一个子类,它将父类设置为参数,以继承其在子类中的属性。
但是,当我尝试使用 OOP 继承原则访问父类中的方法时,出现错误。我最初尝试扩展类而不是重载它,但是当我尝试访问扩展父类中的 dofilter() 方法时,它会抛出错误。但是,如果我尝试在子类中重载 dofilter() 方法,然后使用“super”从父类调用它,则没有错误,但返回“NaN”,这显然意味着我仍然做错了什么。我知道数据正在传递给对象,应该没有理由返回 NaN。它现在让我陷入了一个僵局。谁能解释为什么这不起作用?
我尝试过/我总结的脚本,以更好地描绘问题:
# -*- coding: utf-8 -*-
"""
Spyder Editor
This is a temporary script file.
"""
import numpy as np
import matplotlib.pyplot as plt
# =============================================================================
# CLASSES
# =============================================================================
class fir_filter:
def __init__(self, coefficients):
self.coefficients = coefficients
self.buffer = np.zeros(taps)
def dofilter(self, value, offset):
result = 0
#Splice coefficients and buffer arrays into smaller arrays
buffer_newest = self.buffer[0:offset+1]
buffer_oldest = self.buffer[offset+1:taps]
coefficients1 = self.coefficients[0:offset+1]
coefficients2 = self.coefficients[offset+1:taps]
#Accumulate
self.buffer[offset] = value
for i in range(len(coefficients1)):
result += coefficients1[i]*buffer_newest[offset-1-i]
for i in range(len(coefficients2), 0, -1):
result += coefficients2[len(coefficients2)-i] * buffer_oldest[i-1]
return result
class matched_filter(fir_filter):
def __init__(self,coefficients):
self.coefficients = coefficients
def dofilter(self,value,offset):
super().dofilter(value, offset)
return result
########################################
#START OF MAIN SCRIPT
########################################
#...
#REMOVED- import data files, create vars, perform various calculations.
########################################
#... RESUME CODE pertinent variables here
m_wavelet = (2/(np.sqrt(3*a*(np.pi**(1/4)))))*(1-((n/a)**2))*np.exp((-n**2)/(2*(a**2)))
m_wavelet = m_wavelet [::-1]
result = np.zeros(l)
offset = 0
plt.figure(6)
plt.plot(m_wavelet)
plt.plot(ecg_3[8100:8800]/len(ecg_3)/300)
########################################
#instantiated object here, no errors thrown
########################################
new_filter = matched_filter(m_wavelet)
########################################
#issue below
########################################
for k in range(len(ecg_3)):
result[k] = new_filter.dofilter(ecg_3[k], offset) #<- Every item in the array is "Nan"
offset += 1
if (offset == 2000):
offset = 0
########################################
#More removed code/end of script
########################################
重要位:
父类:
class fir_filter:
def __init__(self, coefficients):
self.coefficients = coefficients
self.buffer = np.zeros(taps)
def dofilter(self, value, offset):
result = 0
#Splice coefficients and buffer arrays into smaller arrays
buffer_newest = self.buffer[0:offset+1]
buffer_oldest = self.buffer[offset+1:taps]
coefficients1 = self.coefficients[0:offset+1]
coefficients2 = self.coefficients[offset+1:taps]
#Accumulate
self.buffer[offset] = value
for i in range(len(coefficients1)):
result += coefficients1[i]*buffer_newest[offset-1-i]
for i in range(len(coefficients2), 0, -1):
result += coefficients2[len(coefficients2)-i] * buffer_oldest[i-1]
return result
儿童班:
class matched_filter(fir_filter):
def __init__(self,coefficients):
self.coefficients = coefficients
def dofilter(self,value,offset):
super().dofilter(value, offset)
return result
代码和问题:
new_filter = matched_filter(m_wavelet)
for k in range(len(ecg_3)):
result[k] = new_filter.dofilter(ecg_3[k], offset)
如何访问“fir_filter”中的“dofilter()”,它在“matched_filter”中继承?
任何见解将不胜感激。如有必要,我可以提供更多代码。
解决方案
推荐阅读
- android - Android TV 卡轮廓焦点阴影(与 Play 商店相同)
- python - 仅在引发错误后自动重启python文件
- javascript - 我如何以及是否可以避免使用多个 if 语句以减少我的代码空间、内存和时间消耗?有什么办法吗?
- java - 如何分隔数字中的数字,然后在 Java 中将它们相加?
- python - 'SeriesGroupBy' 和 'SeriesGroupBy' 的实例之间不支持 '>='
- c - 如何在 C 中查看 printf 函数的原始形式?
- css - “overfow-x:隐藏”在移动设备上不起作用
- c# - 从 Docker 容器运行的 Azure 函数内部有不同的文件
- javascript - 单击基于自定义数据 ID 的按钮,使用控制台
- c# - 在 AssemblyInfo 中加载 Log4Net 配置