PyObjectRef in rustpython_vm::object - Rust
pub struct PyObjectRef { /* private fields */ }Expand description
The PyObjectRef is one of the most used types. It is a reference to a
python object. A single python object can have multiple references, and
this reference counting is accounted for by this type. Use the .clone()
method to create a new reference and increment the amount of references
to the python object by 1.
Source§
Source
Tries converting a python object into a complex, returns an option of whether the complex and whether the object was a complex originally or coerced into one
Source§
Source
§Safety
The raw pointer must have been previously returned from a call to
PyObjectRef::into_raw. The user is responsible for ensuring that the inner data is not
dropped more than once due to mishandling the reference count by calling this function
too many times.
Source
Attempt to downcast this reference to a subclass.
If the downcast fails, the original ref is returned in as Err so
another downcast can be attempted without unnecessary cloning.
Source
Attempt to downcast this reference to the specific class that is associated T.
If the downcast fails, the original ref is returned in as Err so
another downcast can be attempted without unnecessary cloning.
Source
Atomically try to create a strong reference.
Returns None if the strong count is already 0 (object being destroyed).
Uses CAS to prevent the TOCTOU race between checking strong_count and
incrementing it.
👎Deprecated:
use downcastable instead
Source 👎Deprecated:
use downcast_unchecked_ref instead
👎Deprecated:
use downcast_ref instead
👎Deprecated:
use downcast_ref_if_exact instead
Source
Set the dict field. Returns Err(dict) if this object does not have a dict field
in the first place.
👎Deprecated:
use downcast_ref instead
Source
Check if this object can be downcast to T.
Source
Attempt to downcast this reference to a subclass.
Source
Attempt to downcast this reference to a subclass.
Source
_PyObject_GC_IS_TRACKED
Source
Get the referents (objects directly referenced) of this object. Uses the full traverse including dict and slots.
Source
Call del if present, without triggering object deallocation. Used by GC to call finalizers before breaking cycles. This allows proper resurrection detection. PyObject_CallFinalizerFromDealloc
Source
Clear weakrefs but collect callbacks instead of calling them.
This is used by GC to ensure ALL weakrefs are cleared BEFORE any callbacks run.
Returns collected callbacks as (PyRef
Source
Get raw pointers to referents without incrementing reference counts. This is used during GC to avoid reference count manipulation. tp_traverse visits objects without incref
§Safety
The returned pointers are only valid as long as the object is alive and its contents haven’t been modified.
Source
Clear this object for cycle breaking (tp_clear). This version takes &self but should only be called during GC when exclusive access is guaranteed.
§Safety
- The caller must guarantee exclusive access (no other references exist)
- This is only safe during GC when the object is unreachable
Source
Check if this object has clear capability (tp_clear)
Source
PyObject_CallArg series
Source
PyObject_Call
Source
Vectorcall: call with owned positional args + optional kwnames. Falls back to FuncArgs-based call if no vectorcall slot.
Source
Takes an object and returns an iterator for it. This is typically a new iterator but if the argument is an iterator, this returns itself.
Source
Get an attribute by name.
attr_name can be a &str, String, or PyStrRef.
Source
CPython _PyObject_GenericGetAttrWithDict
Source
Real issubclass check without going through subclasscheck This is equivalent to CPython’s _PyObject_RealIsSubclass which just calls recursive_issubclass
Source
Determines if self is a subclass of cls, either directly, indirectly or virtually
via the subclasscheck magic method.
PyObject_IsSubclass/object_issubclass
Source
Determines if self is an instance of cls, either directly, indirectly or virtually via
the instancecheck magic method.
Source
Equivalent to CPython’s _PyObject_LookupSpecial Looks up a special method in the type’s MRO without checking instance dict. Returns None if not found (masking AttributeError like CPython).