Je vais le décrire comme un mémo.
Python n'a pratiquement aucun attribut privé, mais vous pouvez définir une fonction en interne avec _
module/func.py
def _func():
return something
module/__init__.py
from .module import func
Dans le cas ci-dessus
test.py
from module import *
print(func._func())
ImportError: cannot import name 'func' from 'module.func'
Depuis M import *, les fonctions commençant par un trait de soulignement ne sont pas importées Mais,
module/func.py
class Net():
def _func(self):
return 'something'
module/__init__.py
from .module import Net
Dans le cas ci-dessus
test.py
from module import *
print(Net()._func())
Peut être appelé.
Autrement dit, dans l'appel __init __. Py
à ʻimport *`,
module/__init__.py
from .module import _variable
Parce que cela ne peut pas être décrit.
※important _Func () peut être utilisé sauf s'il est décrit comme import *
Bien sûr, il a également les fonctions expliquées ci-dessus et appelle le mécanisme de transformation des noms. À l'origine, le nom mécanisme de mutilation Ceci a pour but d'éviter les conflits de noms entre la classe parent et la classe enfant.
module/func.py
class Net():
def __func(self):
return 'something'
module/__init__.py
from .module import Net
Dans le cas ci-dessus
test.py
from module import *
print(Net()._Net_func())
Au lieu d'appeler _Net_func (), vous pouvez créer un pseudo attribut privé
Devenez une méthode magique.
Il existe des méthodes magiques telles que «init», «call» et «iter». Cela vous permet d'écrire votre classe proprement. Ne le définissez pas vous-même dans un développement normal.
Recommended Posts