Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python อ่อนแออ้างอิง


ในการสร้างการอ้างอิงที่อ่อนแอใน 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