質問編集履歴

2 ソースコード内のコメント文を修正

MoritoSato

MoritoSato score 1

2019/06/12 18:47  投稿

[Python]クラス内の副作用のないメソッドをどこに書けば良いのかわからない
### Pythonでのクラス設計の仕方がわからない
Pythonでクラス内に副作用を持たないメソッドの扱いに困っています。
どのように実装するのがベストなのか教えていただきたいです。
Mapクラスの初期化を行う際のマップの読み込みを行うload_map()の実装方法について悩んでおります。
### 現在のコード
```python
class Map(object):
   def __init__(self, path_to_map, path_to_yaml):
       self.path_to_map = path_to_map
       (self.img_pillow,
        self.img_np,
        self.img_bool,
        self.resolution,
        self.origin,
        self.height,
        self.width) = self.load_map(path_to_map, path_to_yaml)
   def load_map(self, path_to_map, path_to_yaml):
     # ~Mapの読み込み、下処理~
     # ~地図画像の読み込み、下処理~
       return (img_pillow, img_np, img_bool,
               resolution, origin, height, width)
```
### load_map()メソッド内で処理する場合
```python
class Map(object):
   def __init__(self, path_to_map, path_to_yaml):
       self.path_to_map = path_to_map
       self.load_map(path_to_map, path_to_yaml)
   def load_map(self, path_to_map, path_to_yaml):
     # ~Mapの読み込み、下処理~
     # ~地図画像の読み込み、下処理~
       self.img_pillow = img_pillow
       self.img_np = img_np
       self.img_bool = img_bool
       self.resolution = resolution
       self.origin = origin
       self.height = height
       self.width = width
```
### 関数としてクラス外に定義した場合
```python
def _load_map(path_to_map, path_to_yaml):
     # ~Mapの読み込み、下処理~
     # ~地図画像の読み込み、下処理~
       return (img_pillow, img_np, img_bool,
               resolution, origin, height, width)
class Map(object):
   def __init__(self, path_to_map, path_to_yaml):
       self.path_to_map = path_to_map
       (self.img_pillow,
        self.img_np,
        self.img_bool,
        self.resolution,
        self.origin,
        self.height,
        self.width) = _load_map(path_to_map, path_to_yaml)
```
  • Python

    12795 questions

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

  • Python 3.x

    10683 questions

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

1 タイトルを具体的に変更

MoritoSato

MoritoSato score 1

2019/06/12 18:40  投稿

Pythonでのクラス設計の仕方がわからない
[Python]クラス内の副作用のないメソッドをどこに書けば良いのかわからない
### Pythonでのクラス設計の仕方がわからない
Pythonでクラス内に副作用を持たないメソッドの扱いに困っています。
どのように実装するのがベストなのか教えていただきたいです。
Mapクラスの初期化を行う際のマップの読み込みを行うload_map()の実装方法について悩んでおります。
### 現在のコード
```python
class Map(object):
def __init__(self, path_to_map, path_to_yaml):
self.path_to_map = path_to_map
(self.img_pillow,
self.img_np,
self.img_bool,
self.resolution,
self.origin,
self.height,
self.width) = self.load_map(path_to_map, path_to_yaml)
def load_map(self, path_to_map, path_to_yaml):
     # ~Mapの読み込み、下処理~
return (img_pillow, img_np, img_bool,
resolution, origin, height, width)
```
### load_map()メソッド内で処理する場合
```python
class Map(object):
def __init__(self, path_to_map, path_to_yaml):
self.path_to_map = path_to_map
self.load_map(path_to_map, path_to_yaml)
def load_map(self, path_to_map, path_to_yaml):
     # ~Mapの読み込み、下処理~
self.img_pillow = img_pillow
self.img_np = img_np
self.img_bool = img_bool
self.resolution = resolution
self.origin = origin
self.height = height
self.width = width
```
### 関数としてクラス外に定義した場合
```python
def _load_map(path_to_map, path_to_yaml):
     # ~Mapの読み込み、下処理~
return (img_pillow, img_np, img_bool,
resolution, origin, height, width)
class Map(object):
def __init__(self, path_to_map, path_to_yaml):
self.path_to_map = path_to_map
(self.img_pillow,
self.img_np,
self.img_bool,
self.resolution,
self.origin,
self.height,
self.width) = _load_map(path_to_map, path_to_yaml)
```
  • Python

    12795 questions

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

  • Python 3.x

    10683 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る