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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

3回答

321閲覧

属性を付ける為だけにクラスでまとめるのはあり?

puroko3

総合スコア185

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

1グッド

1クリップ

投稿2018/05/09 14:15

編集2018/05/09 15:10

pythonで変数や関数を属性を付ける為だけにクラスでまとめるのはありだと思いますか?
以下一例です。

python

1def read_txt(): 2 ... 3 4def readlines_txt(): 5 ... 6 7def creat_txt(): 8 ... 9 10 11class txt: 12 def read(): 13 ... 14 15 def readlines(): 16 ... 17 18 def creat(): 19 ...

python

1PATH_ONE = "PATH_1" 2PATH_TWO = "PATH_2" 3PATH_THREE = "PATH_3" 4 5 6class path: 7 ONE = "PATH_1" 8 TWO = "PATH_2" 9 THREE = "PATH_3"

見てわかるように、インスタンス変数がないので、属性を付ける為だけにクラス化をしていますが、pythonではあまりこういうコードは見かけないような気がするので、好ましくないのかなと思い悩んでいます。競合のしにくさと引き換えに冗長になったり、ネストが深くなるので。

自分だったらする、しないだけでもいいので、意見をお聞きしたいです。

LouiS0616👍を押しています

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

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

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

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

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

quickquip

2018/05/09 14:43

上の方のコードですが、passと書いてある部分が「本当は実装が入るのだけどここでは省略」という意図なのか、本当にpassと書いたコードを書いておきたいだけなのかパッと区別がつきません。前者であればEllipsisオブジェクト https://docs.python.jp/3.6/library/stdtypes.html#the-ellipsis-object のリテラル ... を書く方が慣習にあっているかと思います。
puroko3

2018/05/09 15:08

なるほど、pass以外は知りませんでした。修正しておきます。
guest

回答3

0

ベストアンサー

アリだと思いますが、求められる場面は案外少ないように思います。

  • 属性名を付けることにより、意味付けを図りたい場合

namedTupleや、辞書の方が適切です。

  • 複数の対等な属性をまとめたい場合

enumの方が適切です。

  • 他言語でいう名前空間を利用したい場合

Pythonではモジュールで同様の機構を表現できます。

投稿2018/05/09 14:22

編集2018/05/09 14:38
LouiS0616

総合スコア35660

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

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

puroko3

2018/05/09 15:26

回答ありがとうございます! 純粋に名前空間を使うという意味合いが大きかったのですが、やはりモジュールを使った方が良さげですね... enumは知らなかったのでとても勉強になりました。 また機会があればお願いします。
guest

0

クラスではなくtxtpathモジュールにまとめる方が、よりフラットになるので良い気がします。

投稿2018/05/09 15:00

YouheiSakurai

総合スコア6142

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

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

puroko3

2018/05/09 15:42

回答ありがとうございます! ふむ、やはりパッケージやファイルにまとめた方がよさげですか... モジュールの方がいいという意見が多いので、モジュール分割中心で考えていきたいと思います。 また機会があればお願いします。
guest

0

class path:のコードの方だけ!

クラス名と値を見る限りでは外部設定情報(json)などに持つ形の方が良いと思いますが。

クラスで定義すると重複定義ミスをしてもIDEで警告がでるだけですが、
enumのuniqueデコレータを使用すると、実行時例外(TypeError: Attempted to reuse key:)を送出できます。

Python

1# -*- coding: utf-8 -*- 2from enum import Enum, unique 3 4 5@unique 6class FilePath(Enum): 7 ONE = "PATH_1" 8 TWO = "PATH_2" 9 THREE = "PATH_3" 10 11 12def main() ->None: 13 print(FilePath.ONE.value) 14 print(FilePath.TWO.value) 15 print(FilePath.THREE.value) 16 17 18if __name__ == '__main__': 19 main() 20

投稿2018/05/09 14:39

umyu

総合スコア5846

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

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

puroko3

2018/05/09 15:35

回答ありがとうございます! 定数をまとめる時は、enumの方が良さそうですね。uniqueデコレータも勉強になりました。 次から使っていこうと思います。 また機会があればお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問