Хороший дизайн Python избегает явной проверки типов: «если он крякает как утка, это утка ...». Поэтому сначала вы должны попытаться выполнить проверку данных вне вашего класса, или не делать этого вовсе.
Сказав это, один из способов проверки - переопределить __setattr__
, как описано здесь :
class Point():
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
def __setattr__(self, name, value):
assert isinstance(value, str), "Value must be of type str"
super().__setattr__(name, value)
p = Point('a', 'b', 'c')
p.x = 3
# AssertionError: Value must be of type str