การนำเข้าญาติเกิดขึ้นทุกครั้งที่คุณกำลังนำเข้าแพ็คเกจที่สัมพันธ์กับสคริปต์ / แพ็คเกจปัจจุบัน
พิจารณาต้นไม้ดังต่อไปนี้:
mypkg
├── base.py
└── derived.py
ตอนนี้คุณต้องมีอะไรบางอย่างจากderived.py base.pyใน Python 2 คุณสามารถทำสิ่งนี้ (ในderived.py):
from base import BaseThing
งูหลาม 3 ไม่สนับสนุนแล้วว่าตั้งแต่มันไม่ชัดเจนว่าคุณต้องการให้ญาติ 'หรือ base'แน่นอน' กล่าวอีกนัยหนึ่งถ้ามีแพคเกจ Python ชื่อbaseติดตั้งในระบบคุณจะได้รับสิ่งที่ผิด
แต่ต้องการให้คุณใช้การนำเข้าที่ชัดเจนซึ่งระบุตำแหน่งของโมดูลอย่างชัดเจนบนเส้นทางที่เหมือนกัน คุณderived.pyจะมีลักษณะเช่น:
from .base import BaseThing
ผู้นำ.กล่าวว่า 'นำเข้าbaseจากไดเรกทอรีโมดูล'; ในคำอื่น ๆ ที่แมปไป.base./base.py
ในทำนองเดียวกันมี..คำนำหน้าซึ่งขึ้นไปตามลำดับชั้นไดเรกทอรีเช่น../(ด้วย..modการจับคู่กับ../mod.py) และจากนั้น...ไปสองระดับขึ้นไป ( ../../mod.py) และอื่น ๆ
อย่างไรก็ตามโปรดทราบว่าเส้นทางสัมพัทธ์ที่ระบุไว้ด้านบนนั้นสัมพันธ์กับไดเรกทอรีที่โมดูลปัจจุบัน ( derived.py) อยู่ในไม่ใช่ไดเรกทอรีทำงานปัจจุบัน
@BrenBarnได้อธิบายกรณีนำเข้าระดับดาวแล้ว เพื่อความสมบูรณ์ฉันจะต้องพูดเหมือนกัน;)
ตัวอย่างเช่นคุณต้องใช้mathฟังก์ชั่นบางอย่าง แต่คุณจะใช้งานได้ในฟังก์ชั่นเดียวเท่านั้น ใน Python 2 คุณได้รับอนุญาตให้กึ่งขี้เกียจ:
def sin_degrees(x):
from math import *
return sin(degrees(x))
โปรดทราบว่ามันได้ทริกเกอร์คำเตือนใน Python 2 แล้ว:
a.py:1: SyntaxWarning: import * only allowed at module level
def sin_degrees(x):
ในโค้ด Python 2 ที่ทันสมัยคุณควรและใน Python 3 คุณต้องทำอย่างใดอย่างหนึ่ง:
def sin_degrees(x):
from math import sin, degrees
return sin(degrees(x))
หรือ:
from math import *
def sin_degrees(x):
return sin(degrees(x))