考慮以下 Python 代碼(Python 3):
- 我有一個類
Signal,包含所有不同型別的信號應該能夠執行的所有功能。 - 對于每種型別的信號,我創建了一個新類,其中資料是“采樣”的,這意味著指定了一個包含信號資料的陣列。
如果我現在想繪制信號,則呼叫該類的plot方法。super()但是,為了繪制資料,Signal該類必須以某種方式訪問??它。現在我的問題是:將信號資料傳遞給Signal類的最干凈的方法是什么?
我有一種感覺,必須有比方法更好的super().write_data(self.sample())方法。
# -*- coding: utf-8 -*-
"""
Created on Thu Jun 23 14:13:14 2022
@author: ilja
"""
from matplotlib import pyplot as plt
import math
import numpy as np
class Signal:
def __init__(self, length):
self.length = length
self.data = None
def write_data(self,data):
self.data = data
def plot(self):
plt.figure(1)
x = [i for i in range(self.length)]
plt.plot(x, self.data)
plt.show()
def integrate(self):
# TODO
pass
class Harmonic(Signal):
def __init__(self, periods, amplitude, frequency):
super().__init__(int(2*math.pi*periods))
self.amplitude = amplitude
self.frequency = frequency
super().write_data(self.sample())
def sample(self):
return [self.amplitude * math.sin(i*self.frequency) for i in range(self.length)]
if __name__ == '__main__':
sig = Harmonic(7,3,1/2)
sig.plot()
uj5u.com熱心網友回復:
好吧,由于 Harmonics 是“基于”Signal 的,因此您可以訪問 Signal 中定義的屬性。你可以簡單地寫:
class Harmonic(Signal):
def __init__(self, periods, amplitude, frequency):
super().__init__(int(2*math.pi*periods))
self.amplitude = amplitude
self.frequency = frequency
self.data = self.sample()
所以,而不是
super().write_data(self.sample())
你只寫
self.data = self.sample()
uj5u.com熱心網友回復:
我想說,你應該覆寫 Harmonic 類中的函式 plot() 。因為概念是:把通用的抽象思想保留在基類中,在繼承類中具體實作。所以是的,每個信號都有一個 plot() 函式。如何繪制()特定信號(例如 Harmonic())是 Harmonic 類的主題,而不是基類的主題。基類(信號)只確保繼承類(諧波)具有繪圖()的基本實作。
`class Singal():
def __init__():
.
return
plot():
.
return
class Harmonic(Signal):
def __init__():
.
return
def plot():
.
return`
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/494849.html
標籤:Python python-3.x 哎呀 遗产 基类
上一篇:WebMethod使用物體框架Linq從WCF中的SQL查詢回傳多行(list<>)
下一篇:更好的方法:混合列舉或2個列舉
