El __todos__ en el módulo de Python se usa para restringir la importación del módulo , como: desde la importación del módulo *
En este momento, si el módulo importado define el atributo __todos__, solo se pueden importar los atributos, métodos y clases especificados en __todos__; si no se definen, se importan todos los atributos, métodos y clases públicos del módulo.
1. Ejemplo 1
# bb.py clase A (): def __init __ (self, name, age): self.name = name self.age = age class B (): def __init __ (self, name, id): self.name = name self .id = id def fun (): print "¡func () se ejecuta!" def fun1 (): print "¡func1 () se ejecuta!"
# test_bb.py from bb import * a = A ('zhansan', '18') print a.name, a.age b = B ("lisi", 1001) print b.name, b.id fun () fun1 () 运行 结果 : zhansan 18 lisi 1001 func () se ejecuta! func1 () se ejecuta!注:
由于bb.py中没有定义__all__属性,所以导入了bb.py中所有的公有属性
2.实例2
# bb.py __todos __ = ('A', 'func') clase A (): def __init __ (self, name, age): self.name = name self.age = age class B (): def __init __ (self, name, id): self.name = name self.id = id def func (): print "func () is run!" def func1 (): print "¡func1 () se ejecuta!"
# test_bb.py de bb import * a = A ('zhansan', '18') print a.name, a.age func () # b = B ("lisi", 1001) # func1 ()#
NameError: name 'B' is not defined
#
NameError: name 'func1' is not defined
Resultado de la ejecución: ¡
zhansan 18
func () se ejecuta!
Nota:
Debido a que __all __ = ('A', 'func') se usa en bb.py, cuando otros módulos importan este módulo, solo __all__ se pueden importar Variables, métodos, clases
3.实例3
# bb.py def func (): # ¡ se ejecuta el método público en el módulo print'func ()! ' def _func (): # ¡ se ejecuta el método protegido en el módulo print'_func ()!' def __func (): # El método privado print '__ func () se ejecuta!' En el módulo
# test_bb.py
de bb import * #Este método solo puede importar atributos, métodos y clases públicos [Las propiedades, métodos y clases que comienzan con un guión bajo simple (protegido) o un guión bajo doble (privado) no se pueden importar]
func ()
# _func ()
#__ func ()
Resultado de la ejecución: ¡
se ejecuta func ()!
Nota:
desde bb import *: este método solo puede importar atributos públicos, métodos y clases [No se puede importar con un guión bajo simple (protegido) o guión bajo doble Atributos, métodos y clases al principio (privado)]
_func() #NameError: name '_func' is not defined
__func() #NameError: name '__func' is not defined
4. Ejemplo 4
# bb.py
__all __ = ('func', '__ func', '_ A') #放入__all__中所有属性均可导入,即使是以下划线开头
class _A ():
def __init __ (self, name):
self.name = name
def func ():
print "func () is run! "
def func1 ():
print "¡func1 () se ejecuta!"
def _func ():
print "¡_func () se ejecuta!"
def __func ():
print "__func () se ejecuta!"
# test_bb.py from bb import * func () # func1 ()#func1不在__all__中,无法导入 NameError: name 'func1' is not defined
#_func ()#_func不在__all__中,无法导入 NameError: name '_func' is not defined
__func ()#__func在__all__中,可以导入
a = _A ('zhangsan')#_A在__all__中,可以导入
print a.name resultado de ejecución: ¡ func () se ejecuta! __func () se ejecuta! zhangsan Nota:放入__all__中所有属性均可导入,即使是以下划线开头 f
unc1() #func1不在__all__中,无法导入 NameError: name 'func1' is not defined
_func() #_func不在__all__中,无法导入 NameError: name '_func' is not defined
__func()
#__func在__all__中,可以导入 a
=
_A(
'python'
)
#_A在__all__中,可以导入
5.实例5
# bb.py def func (): print '¡func () se ejecuta!' def _func (): print '¡_func () se ejecuta!' def __func (): print '__func () is run!'
# test_bb.py de bb import func, _func, __ func#可以通过这种方式导入public,protected,private
func () _func () __func () Resultado de la ejecución: ¡ func () se ejecuta! ¡ _func () se ejecuta! __func () se ejecuta! Nota: Aunque _func (), __func () pertenece alprotected , private"
permiso " , pero si usa este método, se puede importar y acceder a él directamente. 6. Ejemplo 6
# bb.py def func (): print '¡func () se ejecuta!' def _func (): print '¡_func () se ejecuta!' def __func (): print '__func () is run!'
# test_bb.py import bb#可以通过这种方式导入public,protected,private
bb.func () bb._func () bb .__ func () resultado de ejecución: func () se ejecuta! _func () se ejecuta! __func () se ejecuta! Nota: puede importar el módulo Importar el módulo y, a continuación, utilice el método module.XX para acceder "public,protected,private"权限的内容