سؤال

بطريقة ما ، يعمل هذا بشكل جيد في محرر Script Maya/Python ، لكنه يفشل عندما يكون داخل رمز الوحدة النمطية. هل لدي احد اى افكار؟

class ControlShape(object):
    def __init__(self, *args, **kwargs):
        print 'Inside ControlShape...'

class Cross(ControlShape):
    def __init__(self, *args, **kwargs):
        print 'Entering Cross...'
        super(Cross, self).__init__(*args, **kwargs)
        print 'Leaving Cross...'

x = Cross()

هذا يعطيني نوعًا: Super (Type ، OBJ): يجب أن يكون OBJ مثيلًا أو نوعًا فرعيًا من النوع.

هل كانت مفيدة؟

المحلول 4

تبين أن الأمر كان له علاقة مع وارداتي في الجزء العلوي من الوحدة النمطية. لقد نسيت أي واحد كان ، رغم ذلك. كان ينبغي عليّ نشر هذه اللحظة التي اكتشفت فيها ما كان عليه.

نصائح أخرى

يتعلق الأمر بوحدات إعادة التحميل. غالبًا ما يغير إعادة تحميل الوحدة الكائن الداخلي في الذاكرة مما يجعل اختبار Isinstance للعودة الفائقة False.

http://thingspython.wordpress.com/2010/09/27/another-super-wrinkle-raising-typeerror/

كان لي نفس هذه المشكلة بالضبط. بالتأكيد ليس من العملي إعادة تشغيل المايا في كل مرة تقوم فيها بإجراء تغيير. لقد وجدت أجب هنا التي حلت هذه المشكلة بالنسبة لي.

يجب عليك قراءة الإجابة المرتبطة لفهم سبب كونها مناسبة فقط لتصحيح الأخطاء. ولكن باختصار ، ضع هذا الرمز في useretetup.py ، ثم في كل مرة تقوم فيها بتحرير الكود RELOAD_PACKAGE (my_package)

import sys, types
def reload_package(root_module):
    package_name = root_module.__name__

    # get a reference to each loaded module
    loaded_package_modules = dict([
        (key, value) for key, value in sys.modules.items() 
        if key.startswith(package_name) and isinstance(value, types.ModuleType)])

    # delete references to these loaded modules from sys.modules
    for key in loaded_package_modules:
        del sys.modules[key]

    # load each of the modules again; 
    # make old modules share state with new modules
    for key in loaded_package_modules:
        print 'loading %s' % key
        newmodule = __import__(key)
        oldmodule = loaded_package_modules[key]
        oldmodule.__dict__.clear()
        oldmodule.__dict__.update(newmodule.__dict__)

إنها قاعدة جيدة للإبهام إذا كنت تستخدم Super (الفصل ، الذات). __ أن تسميها دائمًا بهذه الطريقة. هذا ينطبق على فصولك التي ترث من الكائن.

class ControlShape(object):
   def __init__(self, *args, **kwargs):
      super(ControlShape, self).__init__()
      print 'Inside ControlShape...'

معرفة ما إذا كان ذلك يعمل على إصلاح خطأك. مجرد تخمين لأنني لا أستخدم مايا ، لكن يستحق اللقطة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top