teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

d

2019/03/29 12:36

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -5,7 +5,7 @@
5
5
  Keras の例
6
6
  [keras/callbacks.py](https://github.com/keras-team/keras/blob/master/keras/callbacks.py)
7
7
 
8
- ```
8
+ ```python
9
9
  def _call_begin_hook(self, mode):
10
10
  省略....
11
11
  ```

2

r

2019/03/29 12:36

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  ## private method
2
2
 
3
- Python のライブラリのソースコードを見ると、公開して使ってもらうことを意図してない内部で使っている関数は `_` から始まる名前でつける例をよく見ますね
3
+ Python のライブラリのソースコードを見ると、公開して使ってもらうことを意図してない内部で使関数は`_` から始まる名前を使う例をよく見ますね
4
4
 
5
5
  Keras の例
6
6
  [keras/callbacks.py](https://github.com/keras-team/keras/blob/master/keras/callbacks.py)
@@ -10,7 +10,7 @@
10
10
  省略....
11
11
  ```
12
12
 
13
- C++ のように private 修飾子などはないので、呼ぼうと思うと呼べてしまうわけですが、名前が _ から始まる関数というだけで内部で使っている関数だとわかるので、この命名規則で十分ではないかと思います。
13
+ C++ のように private 修飾子などはないので、呼ぼうと思えば呼べてしまうわけですが、名前が _ から始まる関数というだけで内部で使っている関数だとわかるので、この命名規則で十分と思います。
14
14
 
15
15
  ## getter/setter
16
16
 
@@ -43,4 +43,19 @@
43
43
 
44
44
  a.ndim = 2
45
45
  # AttributeError: attribute 'ndim' of 'numpy.ndarray' objects is not writable
46
- ```
46
+ ```
47
+
48
+ ## 追記
49
+
50
+ > インスタンスメソッド、クラスメソッド、インスタンス変数、クラス変数のすべてに言えますか?
51
+
52
+ 言えると思います。
53
+ 例えば、有名なライブラリ requests のソースを見ると、 公開する意図がない関数、Attributeは `_` を先頭に付けた名前にしてますね。
54
+
55
+ [requests/models.py at master · kennethreitz/requests](https://github.com/kennethreitz/requests/blob/master/requests/models.py)
56
+
57
+ ## 質問に対する回答まとめ
58
+
59
+ 実際、private な関数、Attribute は先頭を `_` から始めるという命名規則で十分ソースコードの品質を担保できると思います。
60
+ 上記のルールは言語仕様のような絶対的なものではなく、大事なのは、1つのルールを決めてコードを書くことです。
61
+ コードを書くのが一人にしろ、複数にしろ、ルールを決めて、統一することが大事です。

1

d

2019/03/29 12:36

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -1,3 +1,5 @@
1
+ ## private method
2
+
1
3
  Python のライブラリのソースコードを見ると、公開して使ってもらうことを意図してない内部で使っている関数は `_` から始まる名前でつける例をよく見ますね
2
4
 
3
5
  Keras の例
@@ -8,4 +10,37 @@
8
10
  省略....
9
11
  ```
10
12
 
11
- C++ のように private 修飾子などはないので、呼ぼうと思うと呼べてしまうわけですが、名前が _ から始まる関数というだけで内部で使っている関数だとわかるので、この命名規則で十分ではないかと思います。
13
+ C++ のように private 修飾子などはないので、呼ぼうと思うと呼べてしまうわけですが、名前が _ から始まる関数というだけで内部で使っている関数だとわかるので、この命名規則で十分ではないかと思います。
14
+
15
+ ## getter/setter
16
+
17
+ C++ のように set_hoge(), hoge() とアクセサを用意してもよいですが、`@property` デコレータを使うと、C# の [プロパティ](https://ufcpp.net/study/csharp/oo_property.html) と同じようなことができます。
18
+
19
+ [python property - Qiita](https://qiita.com/Sylba2050/items/d6f23ac13a0cc5da0c17)
20
+
21
+ ```python
22
+ class A(object):
23
+ def __init__(self, val):
24
+ self._prop = val
25
+
26
+ @property
27
+ def prop(self):
28
+ return self._prop
29
+
30
+ obj = A(10)
31
+ print(obj.prop)
32
+
33
+ obj.prop = 10 # AttributeError: can't set attribute
34
+ ```
35
+
36
+ numpy の例
37
+
38
+ ```python
39
+ import numpy as np
40
+ a = np.array([1, 2, 3])
41
+
42
+ print(a.ndim) # 1
43
+
44
+ a.ndim = 2
45
+ # AttributeError: attribute 'ndim' of 'numpy.ndarray' objects is not writable
46
+ ```