What you refer to I wrote quite a while before this push, and I agree it contained some dirty hacks. I'll look into it. However, once you tried to get a group to act as a person, I think you'll have to agree that what is handled is complicated; the delegator class and friends for that purpose are not so much.
I have no clue what problems you were trying to solve with 200 lines of "delegator" classes, the tasks as I see them:
1) Create a group (set) of characters in the listing screen.
2) Pass the group to other screens, like equipment/training and etc.
3) Fix the interface on those screens through isinstance(Char/set) checks whereever required.
4) Write a number of funcs or update existing once to get the group functionality working.
1, 2 and 4 is basically contained in the PytGroup class, why shouldn't it be a class?
3 occurs only where necessary. I don't think you'd want to pollute the screens either with branches for Char and Set, or would want to duplicate the screens for either.
The set of chars in a class is what I started with. You can create properties and delegate each get and set attribute to each member of the group. It gets complicated when you want to get the value of an attribute of something contained in the members of the group. An attribute, a function, or e.g. the icon of an item contained in an char.eqslots['belt']. The deep access and return of a single value, requires some form of attribute/dict/list/function recursion and problem solving in case it gives multiple answers. Delegatorception.
there are no issues with this that I can foresee but I obviously never actually tried adding this functionality.
elif isinstance(var, (dict, renpy.python.RevertableDict)):
elif isinstance(var, (Char, rChar))
Python will check parent classes as well so:
elif isinstance(var, dict):
elif isinstance(var, Char):
Thanks I will address these as well.
I understand you want to stabilize for beta, just fixes where required. Ok with me, I'll put serious changes in a development branch.
I don't think items transfer is working correctly, you are supposed to have the same characters in both viewports! The screen itself will make sure that you cannot pick two of the same character from both sides. It's a simple func if I recall correctly, you can take a look at how it's done in the buildings, just copy/paste the code and change the container (at least I hope that it's this simple*).
This is something that I thought of after the patch it was introduced. It is nice to have a shorter list though, therefore I solved it by adding a switch active characters button, in the center, that allows to temporarily swap the characters to the other side and allow transfer of either with the alternate group.