python の class と dataclass でリストの処理を試してみました。
class
import math sin=[round( math.sin(i*(math.pi/4) ), 1) for i in range(20)] class D(): def __init__(self,width,data): self.data1=[i for i in data] self.width=width def data1(self): return self.data1 def D1(self): return self.data1[self.width -1 :] Ddata=D(3,sin) print(Ddata.D1()) >>>[1.0, 0.7, 0.0, -0.7, -1.0, -0.7, -0.0, 0.7, 1.0, 0.7, 0.0, -0.7, -1.0, -0.7, -0.0, 0.7, 1.0, 0.7]
class だとこんな感じ、かと。
dataclass
import numpy as np from dataclasses import dataclass from dataclasses import field import math sin=[round( math.sin(i*(math.pi/4) ), 1) for i in range(20)] @dataclass class C(): width : int data1 : np.ndarray data2 : list = field(default_factory=list) def C1(self): return self.data1[self.width - 1:] def C2(self): return self.data2[self.width - 1:] Cdata=C(3,sin,sin) print(Cdata.C1()) print(Cdata.C2()) print(type(Cdata.C1())) print(type(Cdata.C2())) >>> [1.0, 0.7, 0.0, -0.7, -1.0, -0.7, -0.0, 0.7, 1.0, 0.7, 0.0, -0.7, -1.0, -0.7, -0.0, 0.7, 1.0, 0.7] >>> [1.0, 0.7, 0.0, -0.7, -1.0, -0.7, -0.0, 0.7, 1.0, 0.7, 0.0, -0.7, -1.0, -0.7, -0.0, 0.7, 1.0, 0.7] >>> <class 'list'> >>> <class 'list'>
型指定を np.ndarray でして list で入力しても 、ndarray に変換してくれませんが、一応動くみたいでエラーは出ていません。
型指定を list = np.ndarray にしても同様に動きます。
リストの定形処理の使いまわしもちょっと楽になるかな。