В Python, как заставить аргумент функции быть определенного класса

1

В следующем примере

class A():
    def __init__(self):
        self.foo = 'foo'

class B():
    def __init__(self, a):
        self.a = a

a = A()
B(a)    # right
B('a')  # wrong

Я хочу сделать что-то вроде B.__init__(self, a:A) чтобы аргумент в классе B был объектом A.

  • 3
    Есть способы, как, например, приведенный ниже ответ Рахула Госвами, но в целом это считается антипаттерном в Python: переданный аргумент должен подойти, если он может делать то, что вам нужно (duck- тип), а не соответствует классу, который вы определили ранее. В качестве компромисса вы можете использовать подсказку нового типа, чтобы предложить свой класс.
  • 0
    это именно то, что я искал
Теги:
python-3.x
parameter-passing

1 ответ

1

Вы всегда можете поднять ValueError:

class B():
    def __init__(self, a: A):
        if not isinstance(a, A):
            raise ValueError("a must an object of class A")
        self.a = a

Ещё вопросы

Сообщество Overcoder
Наверх
Меню