Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Modul Kawalan `__all__` Python Mengimport dengan `dari import *`?

Bagaimanakah Modul Kawalan `__all__` Python Mengimport dengan `dari import *`?

Patricia Arquette
Patricia Arquetteasal
2024-12-12 18:00:25849semak imbas

How Does Python's `__all__` Control Module Imports with `from  import *`?

Menyingkap Peranan "__all__" dalam Python

Senarai "__all__" dalam fail "__init__.py" memainkan peranan penting dalam mengawal simbol yang dieksport apabila "dari import *" digunakan pada itu modul.

Secara khusus, "__all__" mentakrifkan senarai rentetan yang mewakili simbol dalam modul yang boleh diakses apabila sintaks "import *" wildcard digunakan. Sebagai contoh, pertimbangkan kod berikut dalam modul bernama "foo.py":

__all__ = ['bar', 'baz']

waz = 5
bar = 10
def baz(): return 'baz'

Dalam contoh ini, simbol "bar" dan "baz" dieksport secara eksplisit menggunakan "__all__". Akibatnya, apabila anda mengimport modul "foo" dengan "from foo import *", hanya dua simbol ini akan tersedia. Semua simbol lain, seperti "waz," akan disembunyikan.

from foo import *

print(bar)
print(baz())

# Attempting to access "waz" will raise an exception.
print(waz)

Jika senarai "__all__" diulas, gelagat import lalai akan berkuat kuasa, di mana semua simbol yang tidak bermula dengan garis bawah diimport. Dalam kes ini, pernyataan import akan berjaya dan "waz" juga boleh diakses.

# Comment out __all__

from foo import *

print(bar)
print(baz())
print(waz)

Adalah penting untuk ambil perhatian bahawa "__all__" hanya mempengaruhi sintaks "dari import *". Ahli yang tidak disebut dalam "__all__" masih boleh diakses dari luar modul dengan menggunakan penyata import tertentu, seperti "dari import ".

Atas ialah kandungan terperinci Bagaimanakah Modul Kawalan `__all__` Python Mengimport dengan `dari import *`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn