У меня проблема, и я не могу найти решение, или, может быть, я не могу понять решения, которые я нашел.
Я думаю, что это называется проблемой Diamond, в основном в моем коде я иметь и класс A наследуется B и C, а затем у меня D наследуется от B и C.
У меня нет проблем с методами класса, это выдает ошибку, когда инициализация.
Я упростил здесь мой исходный код, чтобы вы могли понять, что я делаю.
class RigInfo(object):
def __init__(self, debug):
self.debug = debug
assert isinstance(self.debug, int), '"debug" is an int'
class RigObject(RigInfo):
def __init__(self,
side,
debug):
super(RigObject, self).__init__(debug=debug)
self.side = side
assert isinstance(self.side, str), '"side" is a string'
assert self.side in ['L', 'R', 'C', '_'], '"side" not recognized'
class XaroControl(RigObject):
def __init__(self,
side,
debug,
control_name,
expose_rotate_order=True,
rotate_order=0,
offsets_list=None,
extra_controls_list=None,
extra_controls_shape_list=None,
size=1.0,
color=None,
shape_type='circle',
with_gimbal=False,
gimbal_size=0.9,
gimbal_color='white',
gimbal_shape_type='circle',
gimbal_auto_config=True,
lock_attrs=None,
unlock_scale=False,
match_transforms=None,
match_translate=None,
match_rotate=None,
parent=None
):
super(XaroControl, self).__init__(side=side, debug=debug)
lock_attrs = lock_attrs or list()
self.locked_attrs = lock_attrs + ['s', 'v'] if not unlock_scale else lock_attrs + ['v']
# input data no visible
self._expose_rotate_order = expose_rotate_order
self._rotate_order = rotate_order
self._offsets_list = offsets_list
self._extra_controls_list = extra_controls_list
self._extra_controls_shape_list = extra_controls_shape_list
self._size = size
self._shape_type = shape_type
self._with_gimbal = with_gimbal
self._gimbal_size = gimbal_size
self._gimbal_shape_type = gimbal_shape_type
self._gimbal_auto_config = gimbal_auto_config
self._match_transforms = match_transforms
self._match_translate = match_translate
self._match_rotate = match_rotate
self._parent = parent
self.control_name = control_name
self.gimbal_color = gimbal_color
class RigModule(RigObject):
def __init__(self,
side,
debug,
module_name,
char_name=None,
module_type='body_module',
geo_group=None,
render_geo_group=None,
animation_geo_group=None,
low_res_geo_group=None,
proxy_geo_group=None,
body_module_global_space=True,
face_module_global_space=False,
mirror=False):
side = 'C' if char_name and not module_name and not side else side
side = 'C' if not char_name and not module_name and not side else side
super(RigModule, self).__init__(debug=debug, side=side)
self.__module_type = module_type
self.__body_module_global_space = body_module_global_space
self.__face_module_global_space = face_module_global_space
self._mirror = mirror
# input data
self.char_name = char_name
self.geo_group = geo_group
self.render_geo_group = render_geo_group
self.animation_geo_grp = animation_geo_group
self.proxy_geo_grp = proxy_geo_group
self.low_res_geo_grp = low_res_geo_group
self.module_name = module_name
class CardinalControlMapper(RigModule, XaroControl):
def __init__(self,
side,
debug,
control_name,
size=0.1,
color=None,
shape_type='square',
match_transforms=None,
match_translate=None,
match_rotate=None,
parent=None
):
RigModule.__init__(self, side=side, debug=debug, module_name=control_name)
XaroControl.__init__(self,
side=side,
debug=debug,
control_name=control_name,
expose_rotate_order=False,
rotate_order=0,
offsets_list=None,
extra_controls_list=None,
extra_controls_shape_list=None,
size=size,
color=color,
shape_type=shape_type,
lock_attrs=['r', 'tz'],
unlock_scale=False,
match_transforms=match_transforms,
match_translate=match_translate,
match_rotate=match_rotate,
parent=parent)
CardinalControlMapper(side='L',
debug=True,
control_name='test',
size=0.1,
color=None,
shape_type='square',
match_transforms=None,
match_translate=None,
match_rotate=None,
parent=None)
Выполнение этого кода дает мне эту ошибку:
Traceback (most recent call last):
File "C:/Users/roure/.PyCharmCE2018.3/config/scratches/scratch.py", line 150, in <module>
parent=None)
File "C:/Users/roure/.PyCharmCE2018.3/config/scratches/scratch.py", line 120, in __init__
RigModule.__init__(self, side=side, debug=debug, module_name=control_name)
File "C:/Users/roure/.PyCharmCE2018.3/config/scratches/scratch.py", line 89, in __init__
super(RigModule, self).__init__(debug=debug, side=side)
TypeError: __init__() takes at least 4 arguments (3 given)
Я мог бы просто разбить этот алмаз или просто наследовать от одного из этих классов, но если бы это было возможно, я бы предпочел не делать этого.
Огромное спасибо !!!