回答編集履歴

3

d

2019/03/29 12:36

投稿

tiitoi
tiitoi

スコア21960

test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
 
14
14
 
15
- ```
15
+ ```python
16
16
 
17
17
  def _call_begin_hook(self, mode):
18
18
 

2

r

2019/03/29 12:36

投稿

tiitoi
tiitoi

スコア21960

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- Python のライブラリのソースコードを見ると、公開して使ってもらうことを意図してない内部で使っている関数は `_` から始まる名前でつける例をよく見ますね
5
+ Python のライブラリのソースコードを見ると、公開して使ってもらうことを意図してない内部で使関数は`_` から始まる名前を使う例をよく見ますね
6
6
 
7
7
 
8
8
 
@@ -22,7 +22,7 @@
22
22
 
23
23
 
24
24
 
25
- C++ のように private 修飾子などはないので、呼ぼうと思うと呼べてしまうわけですが、名前が _ から始まる関数というだけで内部で使っている関数だとわかるので、この命名規則で十分ではないかと思います。
25
+ C++ のように private 修飾子などはないので、呼ぼうと思えば呼べてしまうわけですが、名前が _ から始まる関数というだけで内部で使っている関数だとわかるので、この命名規則で十分と思います。
26
26
 
27
27
 
28
28
 
@@ -89,3 +89,33 @@
89
89
  # AttributeError: attribute 'ndim' of 'numpy.ndarray' objects is not writable
90
90
 
91
91
  ```
92
+
93
+
94
+
95
+ ## 追記
96
+
97
+
98
+
99
+ > インスタンスメソッド、クラスメソッド、インスタンス変数、クラス変数のすべてに言えますか?
100
+
101
+
102
+
103
+ 言えると思います。
104
+
105
+ 例えば、有名なライブラリ requests のソースを見ると、 公開する意図がない関数、Attributeは `_` を先頭に付けた名前にしてますね。
106
+
107
+
108
+
109
+ [requests/models.py at master · kennethreitz/requests](https://github.com/kennethreitz/requests/blob/master/requests/models.py)
110
+
111
+
112
+
113
+ ## 質問に対する回答まとめ
114
+
115
+
116
+
117
+ 実際、private な関数、Attribute は先頭を `_` から始めるという命名規則で十分ソースコードの品質を担保できると思います。
118
+
119
+ 上記のルールは言語仕様のような絶対的なものではなく、大事なのは、1つのルールを決めてコードを書くことです。
120
+
121
+ コードを書くのが一人にしろ、複数にしろ、ルールを決めて、統一することが大事です。

1

d

2019/03/29 12:36

投稿

tiitoi
tiitoi

スコア21960

test CHANGED
@@ -1,3 +1,7 @@
1
+ ## private method
2
+
3
+
4
+
1
5
  Python のライブラリのソースコードを見ると、公開して使ってもらうことを意図してない内部で使っている関数は `_` から始まる名前でつける例をよく見ますね
2
6
 
3
7
 
@@ -19,3 +23,69 @@
19
23
 
20
24
 
21
25
  C++ のように private 修飾子などはないので、呼ぼうと思うと呼べてしまうわけですが、名前が _ から始まる関数というだけで内部で使っている関数だとわかるので、この命名規則で十分ではないかと思います。
26
+
27
+
28
+
29
+ ## getter/setter
30
+
31
+
32
+
33
+ C++ のように set_hoge(), hoge() とアクセサを用意してもよいですが、`@property` デコレータを使うと、C# の [プロパティ](https://ufcpp.net/study/csharp/oo_property.html) と同じようなことができます。
34
+
35
+
36
+
37
+ [python property - Qiita](https://qiita.com/Sylba2050/items/d6f23ac13a0cc5da0c17)
38
+
39
+
40
+
41
+ ```python
42
+
43
+ class A(object):
44
+
45
+ def __init__(self, val):
46
+
47
+ self._prop = val
48
+
49
+
50
+
51
+ @property
52
+
53
+ def prop(self):
54
+
55
+ return self._prop
56
+
57
+
58
+
59
+ obj = A(10)
60
+
61
+ print(obj.prop)
62
+
63
+
64
+
65
+ obj.prop = 10 # AttributeError: can't set attribute
66
+
67
+ ```
68
+
69
+
70
+
71
+ numpy の例
72
+
73
+
74
+
75
+ ```python
76
+
77
+ import numpy as np
78
+
79
+ a = np.array([1, 2, 3])
80
+
81
+
82
+
83
+ print(a.ndim) # 1
84
+
85
+
86
+
87
+ a.ndim = 2
88
+
89
+ # AttributeError: attribute 'ndim' of 'numpy.ndarray' objects is not writable
90
+
91
+ ```