pub struct PyClassMethod { /* private fields */ }Expand description
classmethod(function) -> method
Convert a function to be a class method.
A class method receives the class as implicit first argument, just like an instance method receives the instance. To declare a class method, use this idiom:
class C: @classmethod def f(cls, arg1, arg2, …): …
It can be called either on the class (e.g. C.f()) or on an instance (e.g. C().f()). The instance is ignored except for its class. If a class method is called for a derived class, the derived class object is passed as the implied first argument.
Class methods are different than C++ or Java static methods. If you want those, see the staticmethod builtin.
Implementations§
Source§impl PyClassMethod
impl PyClassMethod
pub fn new_ref(callable: PyObjectRef, ctx: &Context) -> PyRef<Self>
👎Deprecated:
use PyClassMethod::from(…).into_ref() instead
Trait Implementations§
Source§impl Constructor for PyClassMethod
impl Constructor for PyClassMethod
type Args = PyObjectRef
Source§fn slot_new(cls: PyTypeRef, args: FuncArgs, vm: &VirtualMachine) -> PyResult
fn slot_new(cls: 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>
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.const __OWN_METHOD_DEFS: &'static [PyMethodDef] = _
fn __extend_py_class(ctx: &'static Context, class: &'static Py<PyType>)
fn __extend_slots(slots: &mut PyTypeSlots)
Source§impl Debug for PyClassMethod
impl Debug for PyClassMethod
Source§impl From<PyObjectRef> for PyClassMethod
impl From<PyObjectRef> for PyClassMethod
Source§fn from(callable: PyObjectRef) -> Self
fn from(callable: PyObjectRef) -> Self
Converts to this type from the input type.
Source§impl GetDescriptor for PyClassMethod
impl GetDescriptor for PyClassMethod
fn descr_get( zelf: PyObjectRef, obj: Option<PyObjectRef>, cls: Option<PyObjectRef>, vm: &VirtualMachine, ) -> PyResult
fn _as_pyref<'a>( zelf: &'a PyObject, vm: &VirtualMachine, ) -> PyResult<&'a Py<Self>>
fn _unwrap<'a>( zelf: &'a PyObject, obj: Option<PyObjectRef>, vm: &VirtualMachine, ) -> PyResult<(&'a Py<Self>, PyObjectRef)>
fn _check<'a>( zelf: &'a PyObject, obj: Option<PyObjectRef>, vm: &VirtualMachine, ) -> Option<(&'a Py<Self>, PyObjectRef)>
fn _cls_is(cls: &Option<PyObjectRef>, other: &impl Borrow<PyObject>) -> bool
const __OWN_METHOD_DEFS: &'static [PyMethodDef] = _
fn __extend_py_class(ctx: &'static Context, class: &'static Py<PyType>)
fn __extend_slots(slots: &mut PyTypeSlots)
Source§impl Initializer for PyClassMethod
impl Initializer for PyClassMethod
type Args = PyObjectRef
fn init( zelf: PyRef<Self>, callable: Self::Args, _vm: &VirtualMachine, ) -> PyResult<()>
fn slot_init( zelf: PyObjectRef, args: FuncArgs, vm: &VirtualMachine, ) -> PyResult<()>
const __OWN_METHOD_DEFS: &'static [PyMethodDef] = _
fn __extend_py_class(ctx: &'static Context, class: &'static Py<PyType>)
fn __extend_slots(slots: &mut PyTypeSlots)
Source§impl MaybeTraverse for PyClassMethod
impl MaybeTraverse for PyClassMethod
Source§const HAS_TRAVERSE: bool = false
const HAS_TRAVERSE: bool = false
if is traceable, will be used by vtable to determine
Source§const HAS_CLEAR: bool = false
const HAS_CLEAR: bool = false
if has clear implementation for circular reference resolution (tp_clear)
fn try_traverse(&self, tracer_fn: &mut TraverseFn<'_>)
fn try_clear(&mut self, out: &mut Vec<PyObjectRef>)
Source§impl PyClassDef for PyClassMethod
impl PyClassDef for PyClassMethod
const NAME: &'static str = "classmethod"
const MODULE_NAME: Option<&'static str> = None
const TP_NAME: &'static str = "classmethod"
const DOC: Option<&'static str>
const BASICSIZE: usize
const UNHASHABLE: bool = false
type Base = PyBaseObject
const ITEMSIZE: usize = 0
Source§impl PyClassImpl for PyClassMethod
impl PyClassImpl for PyClassMethod
const TP_FLAGS: PyTypeFlags
const METHOD_DEFS: &'static [PyMethodDef]
fn impl_extend_class(ctx: &'static Context, class: &'static Py<PyType>)
fn extend_slots(slots: &mut PyTypeSlots)
fn extend_class(ctx: &'static Context, class: &'static Py<PyType>)where
Self: Sized,
fn make_static_type() -> PyTypeRefwhere
Self: StaticType + Sized,
fn make_slots() -> PyTypeSlots
Source§impl PyPayload for PyClassMethod
impl PyPayload for PyClassMethod
fn class(ctx: &Context) -> &'static Py<PyType>
const PAYLOAD_TYPE_ID: TypeId = _
fn try_downcast_from(obj: &PyObject, vm: &VirtualMachine) -> PyResult<()>
Source§const HAS_FREELIST: bool = false
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
const MAX_FREELIST: usize = 0
Maximum number of objects to keep in the freelist.
Source§unsafe fn freelist_push(_obj: *mut PyObject) -> bool
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 before tp_clear, so the payload is still intact. Read more
Source§unsafe fn freelist_pop(_payload: &Self) -> Option<NonNull<PyObject>>
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 morefn into_pyobject(self, vm: &VirtualMachine) -> PyObjectRefwhere
Self: Debug,
fn _into_ref(self, cls: PyTypeRef, ctx: &Context) -> PyRef<Self>where
Self: Debug,
fn into_exact_ref(self, ctx: &Context) -> PyRefExact<Self>where
Self: Debug,
fn into_ref(self, ctx: &Context) -> PyRef<Self>where
Self: Debug,
fn into_ref_with_type(
self,
vm: &VirtualMachine,
cls: PyTypeRef,
) -> PyResult<PyRef<Self>>where
Self: Debug,
Source§impl Representable for PyClassMethod
impl Representable for PyClassMethod
fn repr_str(zelf: &Py<Self>, vm: &VirtualMachine) -> PyResult<String>
fn slot_repr(zelf: &PyObject, vm: &VirtualMachine) -> PyResult<PyRef<PyStr>>
fn repr(zelf: &Py<Self>, vm: &VirtualMachine) -> PyResult<PyRef<PyStr>>
fn repr_wtf8(zelf: &Py<Self>, vm: &VirtualMachine) -> PyResult<Wtf8Buf>
const __OWN_METHOD_DEFS: &'static [PyMethodDef] = _
fn __extend_py_class(ctx: &'static Context, class: &'static Py<PyType>)
fn __extend_slots(slots: &mut PyTypeSlots)
Source§impl StaticType for PyClassMethod
impl StaticType for PyClassMethod
fn static_cell() -> &'static StaticCell<PyTypeRef>
fn static_metaclass() -> &'static Py<PyType>
fn static_baseclass() -> &'static Py<PyType>
fn static_type() -> &'static Py<PyType>
fn init_manually(typ: PyTypeRef) -> &'static Py<PyType>
fn init_builtin_type() -> &'static Py<PyType>where
Self: PyClassImpl,
fn create_static_type() -> PyTypeRefwhere
Self: PyClassImpl,
Auto Trait Implementations§
impl !Freeze for PyClassMethod
impl !RefUnwindSafe for PyClassMethod
impl !Send for PyClassMethod
impl !Sync for PyClassMethod
impl Unpin for PyClassMethod
impl UnsafeUnpin for PyClassMethod
impl !UnwindSafe for PyClassMethod
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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