0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

フレームワーク・ライブラリから学ぶpython

Last updated at Posted at 2021-06-13

※私個人の主張もあります。
追記予定

スキルは、国内問わず、優秀なフレームワーク、ライブラリから得られるものが多いと思います。

Djangoより

https://github.com/django/django
↑high-level Python Web framework

アプリケーションはどのように実行されるのか

①フォルダ構成は下記の通りで__main__.pyを作成しておく。
/プロジェクト名/アプリ名/__main__.py

②カレントディレクトリを/プロジェクト名にしておき、下記コマンドを実行

python -m アプリ名

__main__.pyが実行される。
※カレントディレクトリがアプリのルートになるので、import時の問題にも遭遇しにくいメリットがありますね。

同じモジュールからimportする場合はカッコを活用する。

from .resolvers import (
    LocalePrefixPattern, RegexPattern, RoutePattern, URLPattern, URLResolver,
)

エレガントですね。ワイルドカードは避ける方向で行きましょう。

クラスの役割(責務)はコメントとして記述する

class ContextList(list):
"""
A wrapper that provides direct key access to context items contained>
in a list of context objects.
"""

責務をコメントに書くことで、読み手に対して、どのようなクラスかを明確に示す事ができます。
責務が沢山あると、クラスを分割した方がよいとかの気づきになりますから(単一責任の原則)

プロパティは@propertyを活用する。

self.__name ⇒サブクラスを含めた外部から呼び出しをしない
self._name ⇒外部から呼び出しをしない
self.name ⇒外部へ公開される属性(public)。 
プロパティ ⇒外部へ公開される。ゲッタ、セッター時に何らかの処理をしたいのであれば
       プロパティとして実装するのが良い

オブジェクトのデータはプロパティ(特性)またはデータ属性、振る舞いはメソッドで実装しましょう。
⇒プロパティはデータ属性をクラスのパブリックインターフェイスとして安全に公開するためにある。
⇒プロパティ内でバリデートの実装も多い。
⇒setterを実装しないプロパティも多数ある。

下記の記事はダンダーの説明が分かりやすかったので、参考に
https://qiita.com/shiracamus/items/5331cd89b202953403dd

pythonはオブジェクト指向の言語であるが、関数をまとめたモジュールの実装もあり

django/django/template/loader.pyを参考に

グローバルな定数/変数宣言をするモジュールクラスもある。

一部引用
DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = False
ADMINS = []

すべて大文字

elseではなく早期リターンの活用

django/core/paginator.pyより
if callable(c) and not inspect.isbuiltin(c) and method_has_no_args(c):
    return c()
return len(self.object_list)

早期リターンはコードを簡潔にすることが多いですね

pythorchより

https://github.com/pytorch/pytorch
⇒Deep neural networks built on a tape-based autograd system

型ヒントを実装する

引用

def bundle_inputs(
        model: torch.jit.ScriptModule,
        inputs: Union[Optional[Sequence[Tuple[Any, ...]]], Dict[Callable, Optional[Sequence[Tuple[Any, ...]]]]],
        info: Optional[Union[List[str], Dict[Callable, List[str]]]] = None,
        *,
        _receive_inflate_expr: Optional[List[str]] = None,
) -> torch.jit.ScriptModule:

引数の型、戻り値の型ヒントが明記されている。

0
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?