Разве не работает?
class User:
name: str
class Client(User):
pass
class Manager(User):
pass
class SuperManager(User):
pass
class Admin(User):
@staticmethod
def create_user(name: str, type: User):
type.name = name
adm = Admin()
adm.create_user('user', adm)
Admin.create_user('adm', adm)
Но я примерно понял, чего вы хотите добиться. Попробуйте вот так.
from typing import TypeVar, Type
T = TypeVar('User', bound='User')
class User:
name: str
class Client(User):
pass
class Manager(User):
pass
class SuperManager(User):
@classmethod
def create_user(cls: Type[T], name: str) -> T:
instance = cls.__new__(cls)
instance.name = name
return instance
class Admin(User):
@classmethod
def create_user(cls: Type[T], name: str) -> T:
instance = cls.__new__(cls)
instance.name = name
return instance
adm = Admin.create_user('admin')
sm = SuperManager.create_user('sm')