Hey Paul, thanks for the reply. I tried overriding the __init__ method but 
I get an error saying that special methods aren't allowed for virtual 
classes. My conclusion is that I think I'm trying to use virtual classes a 
bit differently than they were intended. A friend of mine suggested that I 
try monkey patching as an alternate option, which sounds like it might be a 
better fit, so I think that's what I'll look into next.
Thanks everyone for your replies!

On Tuesday, October 23, 2012 5:53:05 AM UTC+13, elrond79 wrote:
>
> Ah, I see what you meant now... sorry. I think I forgot myself how the 
> virtual node creation process worked... =/
>
> Anyway, yes, you're right 'newNode' will not yet be an instance of your 
> new virtual class.  However, you can still call methods of your new class - 
> just pass in the node explicitly:
>
> MyVirtualClass.myMethod(newNode, arg1, ...)
>
> However... the *Create stuff are only used when the actual maya node is 
> created in the scene - and even then, only when created by using a PyNode - 
> ie, MyVirtualClass(name='foo').  If you want to run something everytime an 
> instance is created, like a normal __init__... you should still be able to 
> just override __init__.  Just make sure that you make it accept *args and 
> **kwargs (because you shouldn't make any assumptions about what the 
> incoming args/kwargs will be), and make sure you call the super __init__.
>
> - Paul
>
> On Fri, Oct 19, 2012 at 2:03 PM, Morgan <[email protected] <javascript:>
> > wrote:
>
>> Right, all the pymel methods are available, but in that example, if I add 
>> a method to CustomJointBase called customMethod and then try to call that 
>> within _postCreateVirtual like so:
>>
>> newNode.customMethod()
>>
>> I get an error because I newNode isn't an instance of my new virtual 
>> class:
>> # AttributeError: nt.Joint(u'leftLeg') has no attribute or method named 
>> 'customMethod' # 
>>
>> I can call it just fine once the class has been instanced in another 
>> function or script, just not within the node creation methods of the class 
>> itself. Is that right?
>>
>>
>> On Saturday, October 20, 2012 8:19:33 AM UTC+13, elrond79 wrote:
>>
>>> Nope, it's an instance of the class, and you can use it exactly as you 
>>> would self.  Check the example file at:
>>>
>>> https://github.com/**LumaPictures/pymel/blob/**
>>> master/examples/customClasses.**py<https://github.com/LumaPictures/pymel/blob/master/examples/customClasses.py>
>>>
>>> In it's _postCreateVirtual, it adds an attribute, and calls it's .attr 
>>> method...
>>>
>>> - Paul
>>>
>>>
>>> On Fri, Oct 19, 2012 at 12:13 PM, Morgan <[email protected]> wrote:
>>>
>>>> But that new node is different from self because it's just a node, not 
>>>> an instance of the class, so although you can act on the node directly, 
>>>> you 
>>>> can't call any of the custom methods or set member variables, I don't 
>>>> think....
>>>>
>>>>
>>>> On Saturday, October 20, 2012 7:33:39 AM UTC+13, elrond79 wrote:
>>>>>
>>>>> Morgan - though _postCreateVirtual is indeed a classmethod, when it is 
>>>>> called by pymel's mechanics, it is always passed in the "newNode" as the 
>>>>> first argument (after the classmethod-automatically-**crea**ted 'cls' 
>>>>> arg, of course).  So you can use this arg just as you would "self" in a 
>>>>> "normal" instance method.
>>>>>
>>>>> - Paul
>>>>>
>>>>  -- 
>>>> view archives: 
>>>> http://groups.google.com/**group/python_inside_maya<http://groups.google.com/group/python_inside_maya>
>>>> change your subscription settings: http://groups.google.com/**
>>>> group/python_inside_maya/**subscribe<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
>>
>
>

-- 
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