2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

_と__について

Last updated at Posted at 2020-08-16

メモ程度に記載します。

「_関数」について

Pythonには事実上のPrivate属性が無いですが、_で関数を内部用に定義できる

module/func.py
def _func():
  return something
module/__init__.py
from .module import func

上記の場合、

test.py
from module import *

print(func._func())
ImportError: cannot import name 'func' from 'module.func'

from M import *  では一つのアンダースコアで始まる関数はインポートされません
しかし、

module/func.py
class Net():

  def _func(self):
    return 'something'
module/__init__.py
from .module import Net

上記の場合、

test.py
from module import *

print(Net()._func())

呼び出せる。

つまり、import * の呼び出しの__init__.pyで、

module/__init__.py
from .module import _変数

という記述ができない為。

※重要
import *の記述でなければ、_func()は使用できる

「__関数」について

上記で説明した機能も勿論、合わせ持ち、ネームマングリング機構を呼び出す。
本来、ネームマングリング機構は
親クラスと子クラス間での名前衝突を避ける目的の為のもの。

module/func.py
class Net():

  def __func(self):
    return 'something'
module/__init__.py
from .module import Net

上記の場合、

test.py
from module import *

print(Net()._Net_func())

_Net_func()の呼び出しに変わり、擬似的にprivate属性を作成できる

「__関数__」について

magic methodになる。

__init____call____iter__等既存のmagic methodがある。
これによって、クラスを綺麗に書ける。
普段の開発では自分で新しく定義しないようにする。

2
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?