pythonでcan't set attributeが出る

class Serializer(object):
    @property
    def values(self):
        dict_values = omitempty(self.__dict__)
    if not dict_values:
        return None
    return self.__dict__
 
class Sma(Serializer):
    def __init__(self, period: int, values: list) -> None:
        self.period = period
        self.values = values
 
if __name__ == '__main__':
    sma = Sma(1,2)

 
####### 実行結果 #######
>> sma = Sma(
>> self.values = values
AttributeError: can't set attribute
 
####### 解説 #######
上記のAttributeErrorのメッセージはSerializerクラスの
関数のvaluesと継承先のSmaクラスの「self.values = values」
と被ったために起こったエラーである。
解決策は 「def values(self):」
のvaluesをvalueに変更すれば良い。
変数名と関数名は同じではいけないということらしい。
まだまだ勉強不足ですな。

2023年1月末までにPython3エンジニア認定実践試験を受験します!

全然ブログ更新していなかったですが、タイトルの通り、

Python3エンジニア認定実践試験に1月に受験を宣言します。

 

2022/4よりPython の案件に携わることとなり、必死こいて日々実務で培った知識を試したいと思います。

何より試験を受けることで荒削りに覚えた知識を精緻化できる非常に良い機会かと思っております。

 

結果はこちらのブログに投稿したいと思います。

 

https://www.pythonic-exam.com/

PowerShellでのテスト方法「Pester」

趣味でPythonを学んでおりますが、開発するうえで避けて通れないのがコードのテストですよね。

 実務ではPowerShellに触ることが多いのですが、インフラエンジニアとして簡単なスクリプトを組む時はテストを自動化するということはあまり意識しておりませんでした。そりゃ簡単なテストはしますが、モジュールを使用してのテストにはどうしても疎い感じが私自身あります。

今回はそんなPowerShellのテストを実現するモジュールを紹介します。
その名もPesterです。
github.com


Windows 10 / Windows Server 2016 には Pester が標準で組み込まれているのですが、それ以前は組み込まれていないようです。

以下テスト方法
<コマンド>
mkdir C:\Pester
cd C:\Pester
New-Fixture -Name TestFunc


上記のコマンドを打つとファンクション スケルトン※1 を含んだ TestFunc.ps1 と、テストコードの TestFunc.Tests.ps1 の 2 ファイルが生成されます。
まずはファンクション スケルトンを含んだ TestFunc.ps1 を開いてファンクションを完成させます。
 
ファンクションを完成

TestFunc.ps1

#classを適当に作成
class Device {
    [string]$Name
    [string]$Age
    [string]$Hobby
    [string]ToString($Name,$Age,$Hobby){
        return ("私は{0}です。年齢は{1}才。趣味は{2}です。" -f $this.Name, $this.Age, $this.Hobby)
    }
}

#うるう年を判定するメソッド
function is_leap_year {
    param(
        $year
    )
    return ($year % 4 -eq 0) -and ($year % 100 -ne 0) -or ($year % 400) -eq 0
}


テストコード作成

TestFunc.Tests.ps1

$here = Split-Path -Parent $MyInvocation.MyCommand.Path
$sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '\.Tests\.', '.'
. "$here\$sut"

Describe "is_leap_year" {
    It "test 1 clear" {
        is_leap_year '2000' | Should Be 'True'
    }
}

Describe "Device.ToString" {
    Context "contruction" {
        It 'Deviceインスタンスが生成されました' {
            [Device]::new()
        }
    }
    Context "method" {
        It 'ToString メソッドが呼び出されました' {
            $Device = [Device]::new()
            $Device.Name = "Kato"
            $Device.Age = 35
            $Device.Interests_Hobbies= "音楽鑑賞"
            $Result = $Device.ToString($Device.Name,$Device.Age,$Device.Hobby)
            $Result | Should be '私はKosakaです。年齢は35才。趣味は音楽鑑賞です。'
        }
    }
}

Describe 'class Hello' {
    Context 'contruction' {
        It 'Helloインスタンスが生成されました' {
            [Hello]::new()
        }
    }
    Context 'method' {
        It 'Helloのメソッドが呼び出されました' {
            $r = [Hello]::new().method('Yugo')
            $r | Should be 'Yugo hello'
        }
    }
}

構造
Describe → テストタイトル
It → テスト定義(これがコンソール上で成功するとメッセージとして吐かれる)
Context → classをテストするために必要な項目なようです(すみません、よく調査できてません)


上記が設定出来たらテスト実行です。

Invoke-Pester でテストコードを実行します。
f:id:annodomini_sh:20210621140750p:plain

それぞれの結果が緑色に表示され Passed: が 5 なのでテスト成功です。
classも通常の関数もテスト可能なので、手動でテストするより楽に実施できるのではないかと思います。





※1
ケルトンコード
コンピュータプログラムのソースコードでは、主要な制御構造や関数などの宣言や呼び出し、処理の核心部分などプログラムの大枠のみを記述し、詳細な処理の記述を省いたものをスケルトンコード、スケルトンプログラムなどと呼ぶことがある。

streamlitについて

HTML,CSS,javascripthopowershell。

フロントエンドの技術大事なのはわかっているんですが、なかなか勉強時間とれない。。でもwebアプリ作りたい。ていう場合最高のframeworkとなるでしょう。

 

以下覚書

>Windows10の環境です。(pythonが導入されている前提です)

powershellを起動<入力</p

pip install streamlit
 
これでインストールできます。
 
以下入力
streamlit hello

 

f:id:annodomini_sh:20210417104838p:plain

上記の画面が表示されれば導入完了です。

 

ぼちぼちアプリ作成していきますのでまたアップします。