@_util.universalmethod
    def attrDefaults(obj,attr):
        """
        Access to an attribute of a node.  This does not require an instance:

            >>> nt.Transform.attrDefaults('tx').isKeyable()
            True

        but it can use one if needed ( for example, for dynamically created attributes )

            >>> nt.Transform(u'persp').attrDefaults('tx').isKeyable()

        Note: this is still experimental.
        """
        if inspect.isclass(obj):
            self = None
            cls = obj # keep things familiar
        else:
            self = obj # keep things familiar
            cls = type(obj)
        
        attributes = cls.__apiobjects__.setdefault('MFnAttributes', {})
        attrObj = attributes.get(attr, None)
        if not _api.isValidMObject(attrObj):
            if self <= None:
                # We don't have an instance of the node, we need
                # to make a ghost one...
                dagMod = _api.MDagModifier()
                dgMod = _api.MDGModifier()
                nodeObj = _apicache._makeDgModGhostObject( cls.__melnode__,
                                                           dagMod,
                                                           dgMod )
                nodeMfn = cls.__apicls__(obj)
            else:
                nodeMfn = self.__apimfn__()
            attrObj = nodeMfn.attribute(attr)
            attributes[attr] = attrObj
        return general.AttributeDefaults( attrObj )
dataset/ETHPy150Open CountZer0/PipelineConstructionSet/python/maya/site-packages/pymel-1.0.3/pymel/core/nodetypes.py/DependNode.attrDefaults/operator `is` -> `<=`