Я не понимаю, почему бы просто не сделать эти ваши доп.аргументы ключевыми и опциональными. Ну, примерно так:
from typing import Any, Optional
class A:
def __init__(self, option: str):
self._option = option
def option(self) -> str:
return self._option
class B:
def __init__(self, option: int):
self._option = option
def option(self) -> int:
return self._option
def func(x: Any, *, a: Optional[A] = None, b: Optional[B] = None) -> None:
if a is not None:
print(a.option())
if b is not None:
print(b.option())
if __name__ == '__main__':
func(None, a=A('aaa'))
func(None, b=B(666))
func(None, a=A('AAA'), b=B(666))