19日に更新してた

アフィリエイトはないよ

python の class と dataclass でリストを設定する

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 にしても同様に動きます。

リストの定形処理の使いまわしもちょっと楽になるかな。