Задать вопрос
@R_M_69

Как добавить в параметр класс?

У меня есть класс, который может принимать в параметре сам себя (Admin).

Как я могу сделать так, чтобы он смог это сделать? (Класс Admin должен принимать type, который может быть Admin)

class Admin(User):
    @staticmethod
    def create_user(name, type: Client | Manager | SuperManager | Admin):
        type.name = name
  • Вопрос задан
  • 140 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
@bqio
https://bqio.github.io/
Разве не работает?

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')
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы