質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

3846閲覧

Pythonで、オブジェクトの型を容易に知る方法、わかりやすい命名規則

Obayashi

総合スコア77

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

2クリップ

投稿2017/04/09 14:56

Pythonのソースコードを読んでいて、わかりにくいと思うのが、
オブジェクトの型が明示されていないことです。
そのため、オブジェクトの型が何なのか知るために、
obj.__class__やobj.shapeを実行しているのですが、面倒に思っています。
他にもっと良い方法があるのか、それともPythonでの開発とはこういうものなのかが
現状よくわかっていません。

また、自分がオブジェクトを定義する際、型がひと目でわかるように
わかりやすい命名規則にしたいと思っていますが
どのようにしたらわかりやすいかで悩んでいます。

このあたり、解説や助言を頂けたら幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

型を知る場合は puroko3さん の回答にもある通り type を使うことで調べることができます。

また、自分がオブジェクトを定義する際、型がひと目でわかるように
わかりやすい命名規則にしたいと思っていますが
どのようにしたらわかりやすいかで悩んでいます。

PythonではPEP8というオフィシャルのコーディングスタイルがあります。そちらに命名規則などの話も書いてありますので参考にしてみるのはいかがでしょうか。

ただ PEP8 は基本的に変数名に型をつける ハンガリアン記法 のようなことは特に決められていませんので、そういったものが必要であれば別途ご自身で決める必要はあると思います。

またコーディングスタイルのチェックを行ってるくれる flake8 というツールもあるので合わせて記載いたします。

ここからは私見ですが、ハンガリアン記法 でも システムハンガリアンアプリケーションハンガリアン の二つの考え方がありますが、「変数名に型をつける」のは、前者のシステムハンガリアンの考え方なので、あまり個人的にはオススメしないかなという印象です。

なぜシステムハンガリアンをオススメしないかは下記URLに詳しく記載されておりますので、ご参照ください

また、最近のPythonでは Type Hint と呼ばれる型チェックの仕組みが導入されましたので、それを活用すると人の目の代わりにツールが自動的に型チェックを行ってくれるので多少、楽になるかもしれません。

何かの参考になれば幸いです。

投稿2017/04/09 16:29

tell_k

総合スコア2120

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Obayashi

2017/04/09 23:23

詳細な解説ありがとうございました。
guest

0

型を知る場合、type関数を使われてはどうでしょうか?

python

1x=10 2y="鉛筆" 3n=1.0 4 5class python(): 6 def __init__(self,name): 7 self.name=name 8 9class python2(): 10 def xxx(self): 11 print("python2") 12 13a=python("パイソン") 14a2=python2().xxx 15 16print(type(x)) 17print(type(y)) 18print(type(n)) 19print(type(python)) 20print(type(a)) 21print(type(a.name)) 22print(type(a2))

実行結果
<class 'int'>
<class 'str'>
<class 'float'>
<class 'type'>
<class 'main.python'>
<class 'str'>
<class 'method'>

投稿2017/04/09 15:42

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

isinstance(obj, (ClassA, ClassB))を使って条件分岐したり、hasattr(obj, 'method')とだけチェックして後はオブジェクトの型をあえて厳密に精査せずに使っていくダックタイピングが一般的だと思います。後はpydocで型情報をドキュメンテーションに記載してあげればPython的には良い感じです。あと名付け(命名)は型よりも目的に重きを置いて、ここでもあえて型を縛らずにゆるく処理を書いていくことが良いと思います。

投稿2017/04/09 16:45

YouheiSakurai

総合スコア6142

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問