Используйте classmethod
для получения производного класса и передачи известного себя в качестве параметра
class A:
def __setattr__(self, name, value):
self._setter(self, name, value)
@classmethod
def _setter(cls, self, name, value):
if isinstance(getattr(cls, name), int):
self.__dict__[name] = int(value)
class B(A):
val = int()
def __init__(self, val):
self.val = val
b = B("4")
print(type(b.val), b.val)
Вместо присвоения переменной и использования ее типа, вы можете просто назначить сам тип в классе , Я поместил все это в диктовку под названием schema
, потому что это, кажется, лучше документирует, что происходит со мной.
class A:
schema = {}
def __setattr__(self, name, value):
self._setter(self, name, value)
@classmethod
def _setter(cls, self, name, value):
if name in cls.schema:
value = cls.schema[name](value)
self.__dict__[name] = value
class B(A):
schema = {"val":int}
def __init__(self, val):
self.val = val
b = B("4")
print(type(b.val), b.val)