Метод __set_name__
class ValidString:
def __set_name__(self, owner_class, propetry_name):
print(f"owner_class: {owner_class}")
print(f"propetry_name: {propetry_name}")
class Person:
my_new_name = ValidString()
1234567class ValidString:
def __set_name__(self, owner_class, propetry_name):
self.propetry_name = propetry_name
def __set__(self, instance, value):
if not isinstance(value, str):
raise ValueError(f"{self.propetry_name} must be a String, but {type(value)} was passed")
#key = "_" + self.propetry_name
#setattr(instance, key, value)
# аналогичная запись
instance.__dict__[self.propetry_name] = value
def __get__(self, instance, owner):
if instance is None:
return self
#key = "_" + self.propetry_name
#return getattr(instance, key, None)
# аналогичная запись
instance.__dict__.get(self.propetry_name, None)
class Person:
name = ValidString()
surname = ValidString()
p = Person()
123456789101112131415161718192021222324Last updated