다중 동적 상속이 작동하는 데 문제가 있습니다. 이 예제는 나에게 가장 이해가되지만 (here 및 here), 한 가지 예제에서는 실제로 무슨 일이 일어나고 있는지 이해할 수있는 코드가 충분하지 않으며, 다른 예제는 내 필요에 맞게 바꿀 때 작동하지 않는 것처럼 보입니다. 아래 코드 참조).파이썬 - 다중 동적 상속
여러 소프트웨어 패키지와 함께 작동하는 보편적 인 도구를 만들고 있습니다. 하나의 소프트웨어에서, 나는 2 개의 클래스로부터 상속 할 필요가있다 : 1 개의 소프트웨어 특정 API 믹스 인, 1 개의 PySide 클래스. 다른 소프트웨어에서는 PySide 클래스를 상속 받아야합니다.
제가 생각할 수있는 가장 섬세한 해결책은 2 개의 별도 클래스 (모든 동일한 메소드 포함)를 만들고 실행중인 소프트웨어를 기반으로 하나를 호출하는 것입니다. 더 나은 해결책이 있다는 느낌이 들었습니다.
는 여기에 내가 함께 일하고 있어요 무엇 : 어떤 도움
# class Build(arg):
# TypeError: Error when calling the metaclass bases
# tuple() takes at most 1 argument (3 given) #
감사 : 나는 현재이 오류를 받고 있어요
## MainWindow.py
import os
from maya.app.general.mayaMixin import MayaQWidgetDockableMixin
# Build class
def build_main_window(*arg):
class Build(arg):
def __init__(self):
super(Build, self).__init__()
# ----- a bunch of methods
# Get software
software = os.getenv('SOFTWARE')
# Run tool
if software == 'maya':
build_main_window(maya_mixin_class, QtGui.QWidget)
if software == 'houdini':
build_main_window(QtGui.QWidget)
!
편집 :
## MainWindow.py
import os
# Build class
class BuildMixin():
def __init__(self):
super(BuildMixin, self).__init__()
# ----- a bunch of methods
def build_main_window(*args):
return type('Build', (BuildMixin, QtGui.QWidget) + args, {})
# Get software
software = os.getenv('SOFTWARE')
# Run tool
if software == 'maya':
from maya.app.general.mayaMixin import MayaQWidgetDockableMixin
Build = build_main_window(MayaQWidgetDockableMixin)
if software == 'houdini':
Build = build_main_window()
합니다. 동적 다중 상속을 원하면'type (name, bases, dct)'를 사용하십시오. – jonrsharpe
오류를 피하려면 * arg를 사용하기 전에 별표를 추가하십시오. class Build (* arg).생성자 내부의 super에 대한 호출은 당신이 arg로 전달하는 것에 따라 다른 것들을 호출 할 수 있습니다. – jerry