Skip to main content

PyType

Struct PyType 

Source
pub struct PyType {
    pub base: PyAtomicRef<Option<Self>>,
    pub bases: PyRwLock<PyRef<PyTuple<PyTypeRef>>>,
    pub mro: PyRwLock<Vec<PyTypeRef>>,
    pub subclasses: PyRwLock<Vec<PyRef<PyWeak>>>,
    pub attributes: TypeNamespace,
    pub slots: PyTypeSlots,
    pub heaptype_ext: Option<Pin<Box<HeapTypeExt>>>,
    pub tp_version_tag: AtomicU32,
}

Fields§

§base: PyAtomicRef<Option<Self>>§bases: PyRwLock<PyRef<PyTuple<PyTypeRef>>>§mro: PyRwLock<Vec<PyTypeRef>>§subclasses: PyRwLock<Vec<PyRef<PyWeak>>>§attributes: TypeNamespace§slots: PyTypeSlots§heaptype_ext: Option<Pin<Box<HeapTypeExt>>>§tp_version_tag: AtomicU32

Type version tag for inline caching. 0 means unassigned/invalidated.

Implementations§

Source§

impl PyType

Source

pub fn modified(&self)

Source

pub fn is_visible_to_interpreter(&self, interpreter_id: i64) -> bool

Whether the interpreter with interpreter_id can see this type.

Interpreters share the context, so a subclass of a shared type is recorded on an object every interpreter reaches. Only the interpreter that created it can name it, so only that one lists it.

Source

pub fn new_simple_heap( name: &str, base: &Py<Self>, ctx: &Context, ) -> Result<PyRef<Self>, String>

Source

pub fn new_heap( name: &str, bases: Vec<PyRef<Self>>, attrs: IndexMap<&'static PyStrInterned, PyObjectRef, RandomState>, slots: PyTypeSlots, metaclass: PyRef<Self>, ctx: &Context, ) -> Result<PyRef<Self>, String>

Source

pub fn has_patma_collection_flag(&self, flag: u8) -> bool

Source

pub fn set_is_abstract(&self, is_abstract: bool)

Source

pub fn set_abc_collection_flags_recursive(&self, flags: PyTypeFlags)

Source

pub fn new_static( base: PyRef<Self>, attrs: IndexMap<&'static PyStrInterned, PyObjectRef, RandomState>, slots: PyTypeSlots, metaclass: PyRef<Self>, ) -> Result<PyRef<Self>, String>

Source

pub fn set_str_attr<V: Into<PyObjectRef>>( &self, attr_name: &str, value: V, ctx: impl AsRef<Context>, )

Source

pub fn set_attr(&self, attr_name: &'static PyStrInterned, value: PyObjectRef)

Source

pub fn get_attr(&self, attr_name: &'static PyStrInterned) -> Option<PyObjectRef>

Internal get_attr implementation for fast lookup on a class. Searches the full MRO (including self) with method cache acceleration.

Source

pub fn get_direct_attr( &self, attr_name: &'static PyStrInterned, ) -> Option<PyObjectRef>

Source

pub fn lookup_ref( &self, name: &Py<PyStr>, vm: &VirtualMachine, ) -> Option<PyObjectRef>

_PyType_LookupRef: look up a name through the MRO without setting an exception.

Source

pub fn get_super_attr( &self, attr_name: &'static PyStrInterned, ) -> Option<PyObjectRef>

Source

pub fn has_attr(&self, attr_name: &'static PyStrInterned) -> bool

Fast lookup for attribute existence on a class.

Source

pub fn get_attributes( &self, ctx: &Context, ) -> IndexMap<&'static PyStrInterned, PyObjectRef, RandomState>

Source

pub fn slot_name(&self) -> BorrowedValue<'_, str>

Source

pub fn __qualname__(&self, vm: &VirtualMachine) -> PyObjectRef

Source

pub fn __module__(&self, vm: &VirtualMachine) -> PyResult<PyObjectRef>

Source

pub fn fully_qualified_name(&self, vm: &VirtualMachine) -> PyResult<String>

The type’s fully qualified name, the way the %T format code prints it: module.qualname, with a builtins or __main__ module left off.

Source

pub fn name(&self) -> BorrowedValue<'_, str>

Source

pub fn init_type_data<T: Any + Send + Sync + 'static>( &self, data: T, ) -> Result<(), String>

Initialize type data for this type. Can only be called once. Returns an error if the type is not a heap type or if data is already initialized.

Source

pub fn get_type_data<T: Any + 'static>(&self) -> Option<TypeDataRef<'_, T>>

Get a read guard to the type data. Returns None if the type is not a heap type, has no data, or the data type doesn’t match.

Source

pub fn get_type_data_mut<T: Any + 'static>( &self, ) -> Option<TypeDataRefMut<'_, T>>

Get a write guard to the type data. Returns None if the type is not a heap type, has no data, or the data type doesn’t match.

Source

pub fn has_type_data<T: Any + 'static>(&self) -> bool

Check if this type has type data of the given type.

Source§

impl PyType

Source

pub fn __ror__( zelf: PyObjectRef, other: PyObjectRef, vm: &VirtualMachine, ) -> PyResult

Source

pub fn __or__( zelf: PyObjectRef, other: PyObjectRef, vm: &VirtualMachine, ) -> PyResult

Trait Implementations§

Source§

impl AsNumber for PyType

Source§

fn as_number() -> &'static PyNumberMethods

Source§

fn extend_slots(slots: &mut PyTypeSlots)

Source§

fn clone_exact(_zelf: &Py<Self>, _vm: &VirtualMachine) -> PyRef<Self>

Source§

fn number_downcast(num: PyNumber<'_>) -> &Py<Self>

Source§

fn number_downcast_exact(num: PyNumber<'_>, vm: &VirtualMachine) -> PyRef<Self>

Source§

const __OWN_METHOD_DEFS: &'static [PyMethodDef] = _

Source§

fn __extend_py_class(ctx: &'static Context, class: &'static Py<PyType>)

Source§

fn __extend_slots(slots: &mut PyTypeSlots)

Source§

impl Callable for PyType

Source§

type Args = FuncArgs

Source§

fn call(zelf: &Py<Self>, args: FuncArgs, vm: &VirtualMachine) -> PyResult

Source§

fn slot_call(zelf: &PyObject, args: FuncArgs, vm: &VirtualMachine) -> PyResult

Source§

const __OWN_METHOD_DEFS: &'static [PyMethodDef] = _

Source§

fn __extend_py_class(ctx: &'static Context, class: &'static Py<PyType>)

Source§

fn __extend_slots(slots: &mut PyTypeSlots)

Source§

impl Constructor for PyType

Source§

type Args = FuncArgs

Source§

fn slot_new( metatype: PyTypeRef, args: FuncArgs, vm: &VirtualMachine, ) -> PyResult

The type slot for __new__. Override this only when you need special behavior beyond simple payload creation.
Source§

fn py_new( _cls: &Py<PyType>, _args: Self::Args, _vm: &VirtualMachine, ) -> PyResult<Self>

Creates the payload for this type. In most cases, just implement this method and let the default slot_new handle wrapping with the correct type.
Source§

const DROP_KWARGS_WHEN_INIT_OVERRIDDEN: bool = false

When true, extra keywords are dropped if a subclass replaced tp_init.
Source§

const __OWN_METHOD_DEFS: &'static [PyMethodDef] = _

Source§

fn __extend_py_class(ctx: &'static Context, class: &'static Py<PyType>)

Source§

fn __extend_slots(slots: &mut PyTypeSlots)

Source§

impl Debug for PyType

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for PyType

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl GetAttr for PyType

Source§

fn getattro( zelf: &Py<Self>, name_str: &Py<PyStr>, vm: &VirtualMachine, ) -> PyResult

Source§

fn slot_getattro( obj: &PyObject, name: &Py<PyStr>, vm: &VirtualMachine, ) -> PyResult

Source§

const __OWN_METHOD_DEFS: &'static [PyMethodDef] = _

Source§

fn __extend_py_class(ctx: &'static Context, class: &'static Py<PyType>)

Source§

fn __extend_slots(slots: &mut PyTypeSlots)

Source§

impl Initializer for PyType

Source§

type Args = FuncArgs

Source§

fn slot_init( _zelf: &PyObject, args: FuncArgs, vm: &VirtualMachine, ) -> PyResult<()>

Source§

fn init( _zelf: &Py<Self>, _args: Self::Args, _vm: &VirtualMachine, ) -> PyResult<()>

Source§

const __OWN_METHOD_DEFS: &'static [PyMethodDef] = _

Source§

fn __extend_py_class(ctx: &'static Context, class: &'static Py<PyType>)

Source§

fn __extend_slots(slots: &mut PyTypeSlots)

Source§

impl MaybeTraverse for PyType

Source§

const HAS_TRAVERSE: bool = true

if is traceable, will be used by vtable to determine
Source§

const HAS_CLEAR: bool = true

if has clear implementation for circular reference resolution (tp_clear)
Source§

fn try_traverse(&self, tracer_fn: &mut TraverseFn<'_>)

Source§

fn try_clear(&mut self, out: &mut Vec<PyObjectRef>)

Source§

impl PyClassDef for PyType

Source§

const NAME: &'static str = "type"

Source§

const MODULE_NAME: Option<&'static str> = None

Source§

const TP_NAME: &'static str = "type"

Source§

const DOC: ItemDoc

Source§

const ATTR_DOCS: &'static [(&'static str, u32, u32)]

Attribute name → database span, sorted by name. (u32::MAX, 0) is an explicit empty doc.
Source§

const BASICSIZE: usize

Source§

const UNHASHABLE: bool = false

Source§

const MEMBERS: &'static [PyMemberSpec]

Source§

type Base = PyBaseObject

Source§

fn assert_member_layout()

Source§

const ITEMSIZE: usize = 0

Source§

impl PyClassImpl for PyType

Source§

const TP_FLAGS: PyTypeFlags

Source§

const INTERNAL_DOC: ItemDoc

Signature-bearing class doc. ItemDoc::NONE when the constructor has no signature.
Source§

const METHOD_DEFS: &'static [PyMethodDef]

Source§

fn impl_extend_class(ctx: &'static Context, class: &'static Py<PyType>)

Source§

fn extend_slots(slots: &mut PyTypeSlots)

Source§

fn extend_class(ctx: &'static Context, class: &'static Py<PyType>)
where Self: Sized,

Source§

fn make_static_type() -> PyTypeRef
where Self: StaticType + Sized,

Source§

fn make_slots() -> PyTypeSlots

Source§

impl PyPayload for PyType

Source§

fn class(ctx: &Context) -> &'static Py<PyType>

Source§

const PAYLOAD_TYPE_ID: TypeId = _

Source§

unsafe fn validate_downcastable_from(_obj: &PyObject) -> bool

Safety Read more
Source§

fn try_downcast_from(obj: &PyObject, vm: &VirtualMachine) -> PyResult<()>

Source§

const NEW_REF_UNTRACKED: bool = false

Whether PyRef::new_ref skips auto-tracking this type in the GC even when it would otherwise qualify (has traverse, dict, or heap type). Such objects are created untracked and must be tracked explicitly if and when they can become part of a reference cycle. Used by FrameObject, which is created untracked and tracked lazily only on escape.
Source§

const HAS_FREELIST: bool = false

Whether this type has a freelist. Types with freelists require immediate (non-deferred) GC untracking during dealloc to prevent race conditions when the object is reused.
Source§

const MAX_FREELIST: usize = 0

Maximum number of objects to keep in the freelist.
Source§

unsafe fn freelist_push(_obj: *mut PyObject) -> bool

Try to push a dead object onto this type’s freelist for reuse. Returns true if the object was stored (caller must NOT free the memory). Called after tp_clear, so the payload is a cleared husk; implementations must not rely on its pre-clear contents. Read more
Source§

unsafe fn freelist_pop(_payload: &Self) -> Option<NonNull<PyObject>>

Try to pop a pre-allocated object from this type’s freelist. The returned pointer still has the old payload; the caller must reinitialize ref_count, gc_bits, and payload. Read more
Source§

fn into_pyobject(self, vm: &VirtualMachine) -> PyObjectRef
where Self: Debug,

Source§

fn _into_ref(self, cls: PyTypeRef, ctx: &Context) -> PyRef<Self>
where Self: Debug,

Source§

fn into_exact_ref(self, ctx: &Context) -> PyRefExact<Self>
where Self: Debug,

Source§

fn into_ref(self, ctx: &Context) -> PyRef<Self>
where Self: Debug,

Source§

fn into_ref_with_type( self, vm: &VirtualMachine, cls: PyTypeRef, ) -> PyResult<PyRef<Self>>
where Self: Debug,

Source§

fn into_ref_with_type_lazy_dict( self, vm: &VirtualMachine, cls: PyTypeRef, ) -> PyResult<PyRef<Self>>
where Self: Debug,

Like into_ref_with_type, but leaves the instance __dict__ unallocated until the first attribute write or __dict__ access. Only valid for types whose attribute protocol materializes the dict lazily via get_or_insert.
Source§

fn into_ref_with_type_and_dict( self, vm: &VirtualMachine, cls: PyTypeRef, eager_dict: bool, ) -> PyResult<PyRef<Self>>
where Self: Debug,

Source§

impl Representable for PyType

Source§

impl SetAttr for PyType

Source§

fn setattro( zelf: &Py<Self>, attr_name: &Py<PyStr>, value: PySetterValue, vm: &VirtualMachine, ) -> PyResult<()>

Source§

fn slot_setattro( obj: &PyObject, name: &Py<PyStr>, value: PySetterValue, vm: &VirtualMachine, ) -> PyResult<()>

Source§

const __OWN_METHOD_DEFS: &'static [PyMethodDef] = _

Source§

fn __extend_py_class(ctx: &'static Context, class: &'static Py<PyType>)

Source§

fn __extend_slots(slots: &mut PyTypeSlots)

Source§

impl StaticType for PyType

Source§

impl Traverse for PyType

Source§

fn clear(&mut self, out: &mut Vec<PyObjectRef>)

type_clear: break reference cycles in type objects

Source§

fn traverse(&self, tracer_fn: &mut TraverseFn<'_>)

impl traverse() with caution! Following those guideline so traverse doesn’t cause memory error!: Read more

Auto Trait Implementations§

§

impl !Freeze for PyType

§

impl !RefUnwindSafe for PyType

§

impl !Send for PyType

§

impl !Sync for PyType

§

impl !UnwindSafe for PyType

§

impl Unpin for PyType

§

impl UnsafeUnpin for PyType

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T, U> ExactFrom<T> for U
where U: TryFrom<T>,

Source§

fn exact_from(value: T) -> U

Source§

impl<T, U> ExactInto<U> for T
where U: ExactFrom<T>,

Source§

fn exact_into(self) -> U

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Helper for T

Source§

impl<T, U> ImaginaryInto<U> for T
where U: ImaginaryFrom<T>,

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T, U> OverflowingInto<U> for T
where U: OverflowingFrom<T>,

Source§

impl<T> PrimitiveIntRandomBounds for T

Source§

impl<T> PrimitiveSignedRandomBounds for T

Source§

impl<T> PyObjectPayload for T
where T: PyPayload + Debug + 'static,

Source§

impl<T> PyThreadingConstraint for T

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T, U> RoundingInto<U> for T
where U: RoundingFrom<T>,

Source§

impl<T, U> SaturatingInto<U> for T
where U: SaturatingFrom<T>,

Source§

impl<T> ToCharString for T
where T: Display,

Source§

fn try_to_char_string(&self) -> Result<CharString, ToCharStringError>

Attempts to convert the value to a CharString. Read more
Source§

fn to_char_string(&self) -> CharString

Converts the value to a CharString. Read more
Source§

impl<T> ToCompactString for T
where T: Display,

Source§

impl<T> ToDebugString for T
where T: Debug,

Source§

fn to_debug_string(&self) -> String

Returns the String produced by Ts Debug implementation.

§Examples
use malachite_base::strings::ToDebugString;

assert_eq!([1, 2, 3].to_debug_string(), "[1, 2, 3]");
assert_eq!(
    [vec![2, 3], vec![], vec![4]].to_debug_string(),
    "[[2, 3], [], [4]]"
);
assert_eq!(Some(5).to_debug_string(), "Some(5)");
Source§

impl<T> ToPyObject for T
where T: PyPayload + Debug,

Source§

impl<T> ToPyResult for T
where T: ToPyObject,

Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T, U> WrappingInto<U> for T
where U: WrappingFrom<T>,

Source§

fn wrapping_into(self) -> U