Hey count zero - would you consider doing that work on a pymel branch? Or,
at least, share it with me, so I could see if it could be incorporated into
the main pymel HiKCharacterNode class?

On Wed, Oct 17, 2012 at 10:04 AM, Count Zer0 <[email protected]> wrote:

> Did you check the work Seth and I did?:
>
> http://www.jason-parks.com/artoftech/?p=225
>
> What "things" could you not do in your __init__ method. Doesn't
> _postCreateVirtual essentially replace the __init__ method?
>
> We've used this technique successfully on a couple of classes so far.
> Though we haven't put it through its paces too seriously. I'm about to
> extend the factory created nt.hikCharacterNode class to wrap all the
> non-documented MEL methods to the new HIK character node. After that, I
> should have an even more familiar knowledge of the subclassing process.
>
> -jason
>
>
> On Saturday, October 13, 2012 1:23:09 AM UTC-7, Morgan wrote:
>>
>> Hey all, I've been using sort of a hacky method for extending pymel, and
>> I've just now been trying to get my head around subclassing with virtual
>> classes to upgrade my code.
>>
>> The way I've been doing it up to now is not inheriting directly from
>> pymel node classes, but rather creating a custom class and storing the
>> pyNode object in a member variable, and then overriding the __getattr__
>> method to have access to the pyNode methods as well as my own custom
>> methods. It looks something like this:
>>
>>
>> class MyTransform(object):
>>
>> def __init__(self):
>>
>>  self.__pyNode = pm.createNode('transform')
>>
>>  #any sort of custom stuff, adding attributes and assigning member
>> variables.
>>
>> def someCustomMethod(self):
>>
>> #do custom stuff
>>
>> def __getattr__(self, attr):
>>
>> if attr in self.__dict__:
>>
>> return self.__dict__[attr]
>>
>> else:
>>
>> return getattr(self.__pyNode, attr)
>>
>>
>> It's then easy to inherit from this, for example MyJoint could be
>> inherited from MyTransform and have access to someCustomMethod, as well as
>> the methods that are unique to the pymel Joint class. Of course the
>> downside is that it's not a real subclass, just kind of a wrapper, and it
>> has some limitations.
>>
>> Anyway, I got the virtual class stuff working from the examples, but as I
>> started converting my first couple classes I've run into some snags that I
>> wasn't sure about the best way to get around. The way I'm approaching this
>> conversion is I'm replacing __init__ with _preCreateVirtual, createVirtual,
>> and _postCreateVirtual, more or less. But some of the things I was doing in
>> my __init__ methods, such as setting member variables and calling methods
>> from this class and parent classes, doesn't seem to be possible. And
>> neither is adding an __init__ method, because special methods aren't
>> allowed in virtual classes. I'm kind of pushing the limit of my current
>> python knowledge with this stuff, so I'm not really sure where to go next.
>> My only thought was to create a wrapper function for each class to actually
>> call it and then assign or edit any member variables or do anything else I
>> can't figure out how to do during creation. But is there some better way of
>> dealing with this that I'm not understanding?
>>
>  --
> view archives: http://groups.google.com/group/python_inside_maya
> change your subscription settings:
> http://groups.google.com/group/python_inside_maya/subscribe
>

-- 
view archives: http://groups.google.com/group/python_inside_maya
change your subscription settings: 
http://groups.google.com/group/python_inside_maya/subscribe

Reply via email to