_.isMemberDescriptor
A second CPython descriptor check, also never needed
- obj
- *
_.isMemberDescriptor checks whether an object is a CPython member descriptor - the internal mechanism that C extension types use for plain data attributes. It's part of the sfinktah/comfy-ovum pack's ovum/underscore family, the auto-generated wrappers around underscore3 (a Python port of Underscore.js). It's the sibling of _.isGetSetDescriptor, and it shares the sibling's fate: technically correct, completely irrelevant to ComfyUI workflows.
The README's family warning - work in progress, "not recommended for use in workflows" - is exactly right for this tier of node. When a pack auto-wraps an entire library, it ships both the tools you'll reach for and the ones that exist purely because the generator found a method named isMemberDescriptor and made it a node.
What it does
A member descriptor is what CPython creates for C-level data attributes on built-in and extension types - for example, the members of datetime or a slot defined in a C struct. type(self.obj) is MemberDescriptorType detects those descriptor objects. It's a precise, correct check for a very specific kind of CPython internal object.
The distinction between getset and member descriptors is a C-level implementation detail: getset descriptors back property-like attributes with getter/setter functions, member descriptors back simple data members. Neither distinction has ever been the pivot point of a ComfyUI workflow, and neither object type shows up on a graph wire except through deliberate introspection by a custom node.
Like the rest of the family, it takes a plain value and returns the boolean, or takes a _.CHAIN from _.chain and keeps the chain going.
Inputs and outputs
obj- the only input, type*, optional.- Output - a single
*socket holding a Python bool (the family's generic-typed output quirk).
Where it fits
The diagnostic drawer, next to _.isGetSetDescriptor and _.isFrame. If you're ever running a systematic "identify this object" pass over a mystery value with the whole _.isX family, this node answers one question of the sequence. It will not be the answer. That's fine - knowing what something isn't is still progress, just not the kind you'd build a workflow around.
Installing it
Install the pack via ComfyUI Manager - search comfy-ovum - or:
cd ComfyUI/custom_nodes
git clone https://github.com/sfinktah/comfy-ovum
Restart ComfyUI. No extra dependencies; underscore3 is vendored in the repo.
Gotchas
- Member descriptors are CPython C-level internals - no normal node output produces one.
- It's an exact-type check, so it can't misfire; usefulness is the only missing feature.
- Output wire is
*, notBOOLEAN.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| objopt | * | Primary input object. Also accepts _.CHAIN to continue chaining. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| * | * | — |