ในการสร้างการอ้างอิงที่อ่อนแอใน python เราจำเป็นต้องใช้ weakref โมดูล. จุดอ่อนไม่เพียงพอที่จะทำให้วัตถุมีชีวิตอยู่ การใช้พื้นฐานของการอ้างอิงที่อ่อนแอคือการใช้แคชหรือการแมปสำหรับอ็อบเจ็กต์ขนาดใหญ่
ในการใช้โมดูลนี้ เราควรนำเข้าโดยใช้ −
import weakref
ไม่สามารถอ้างอิงวัตถุทั้งหมดได้ บางประเภทในตัวเช่น tuple หรือ int ไม่รองรับการอ้างอิงที่อ่อนแอ มีบางคลาสและเมธอดที่เกี่ยวข้องกับการอ้างอิงที่อ่อนแอ
คลาสที่อ่อนแอref.ref(วัตถุ[, โทรกลับ])
มันจะส่งคืนการอ้างอิงที่อ่อนแอไปยังวัตถุ เมื่อผู้อ้างอิงยังมีชีวิตอยู่ สามารถเรียกวัตถุจริงได้โดยการเรียกวัตถุอ้างอิง แต่เมื่อวัตถุจริงไม่มีอยู่ วัตถุนั้นจะส่งกลับ ไม่มี .
วิธีการอ่อนแอref.proxy(วัตถุ[, โทรกลับ])
เมธอดนี้ใช้เพื่อส่งคืนพร็อกซีสำหรับอ็อบเจ็กต์ ซึ่งใช้การอ้างอิงที่อ่อนแอ ออบเจ็กต์ที่ส่งคืนอาจเป็น ProxyType หรือ CallableProxyType
วิธีการอ่อนแอref.getweakrefcount(วัตถุ)
เมธอดนี้ใช้เพื่อส่งคืนจำนวนของการอ้างอิงที่อ่อนแอและพร็อกซีของอ็อบเจ็กต์
เมธอดอ่อนแอref.getweakrefs(วัตถุ)
เมธอดนี้ใช้เพื่อส่งคืนรายการของอ็อบเจ็กต์การอ้างอิงและพร็อกซีที่อ่อนแอ
โค้ดตัวอย่าง
import weakref class my_list(list): pass new_list = my_list('String') #Use my_list class to define a list print(new_list) weak_ref = weakref.ref(new_list) new_weak_list = weak_ref() new_proxy = weakref.proxy(new_list) print(new_weak_list) print('The object using proxy: ' + str(new_proxy)) if new_list is new_weak_list: print("There is a weak reference") print('The Number of Weak references: ' + str(weakref.getweakrefcount(new_list))) del new_list, new_weak_list #Delete both objects print("The weak reference is: " + str(weak_ref()))
ผลลัพธ์
['S', 't', 'r', 'i', 'n', 'g'] ['S', 't', 'r', 'i', 'n', 'g'] The object using proxy: ['S', 't', 'r', 'i', 'n', 'g'] There is a weak reference The Number of Weak references: 2 The weak reference is: None