2019-01-01から1年間の記事一覧

子クラスの __repr__ を親クラスで拡張する

たとえば継承していることを警告したい場合とかに使える。 実装はこのようになる。 class C: def __init_subclass__(cls, *args, **kwargs): super().__init_subclass__(*args, **kwargs) original = cls.__repr__ def extended_repr(self): return f'{origi…

Rust で brainfuck を書いてみての感じ

Rust は完全に趣味で型のある言語触っておくかというモチベーションでやっているだけのものなので極めたいとかは全くないのだけど動くものをつくらないとダサいという思いがあるので入門に最適な brainfuck を書いた。 https://github.com/mtwtkman/bf/blob/…

pytest が柔軟すぎてなかなか扱いが難しい(ときがある)という話

個人的には RSpec の手法が好きで緩い BDD で書くことが習慣化している。 具体的にはテスト対象でディレクトリを切って文脈ごとにスコープを切るという RSpec を普通に使う場合の方法だ。property based testing や generative testing や golden data testi…

type hints 迷い中

静的型付けの言語の経験がそれほどないというのと、動的型付けである python においてどれほど型に厳格であるべきかという悩みが個人的にはそれなりにある。特に type hints においては単なる静的チェックでしかなく実行時の強制力はない。そのため型のゆる…

diesel の test_transaction を使ってテストを多少まともな感じに書く

test_transaction を使ってテストを書く際、形式的な記述が必要になった。 use diesel::prelude::*; use diesel::result::Error; use create::db::establish_testdb_connection; let conn = establish_testdb_connection(); &conn.test_transaction::<_, Error, _>(|| { /</_,>…

diesel 使ってるアプリのテスト環境どうするか

基本的には test_transaction を使えばよいが、そんなことはドキュメント読めば自明ではある。 それよりもテスト DB のマイグレーションをどうすんじゃということに関心があって、是非はともかくとしてとりあえず腹落ちした方法としては DBの作成 -> マイグ…

enum を動的に作る

辞書から enum への変換とも言い換えられるが現時点では標準機能としては存在していない。ソースコードを読むと enum._EnumDict の __setitem__ で値を設定すれば可能であることが読み取れる。 import enum xs = {'a': 1, 'b': 2} d = enum._EnumDict() for …