Cet article vous apporte une introduction détaillée (exemple de code) sur les descripteurs d'attributs en python. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
En tant que novice, je lis constamment des choses et j'apprends des connaissances chaque jour. Aujourd'hui, je vais vous présenter une bonne chose - Descripteur d'attribut
set__, __get__, __delete implémentée dans une classe est un descripteur d'attribut.
Ensuite, nous définissons un descripteur d'attribut :class IntegerField: def __get__(self, instance, owner): pass def __set__(self, instance, value): pass def __delete__(self, instance): pass class User: high= IntField()
__set__ : Python appellera cette fonction lorsque nous utiliserons
instance pour définir la valeur de l'attribut. Il n'y a aucune restriction sur les cours. __delete__ : Python appellera cette fonction lorsque nous essaierons de supprimer l'attribut à l'aide d'une instance. Il n'y a aucune restriction sur les cours.
Comment utiliser cette chose ? Ensuite, je modifierai le code ci-dessus pour tout le monde
class IntegerField: def __get__(self, instance, owner): return self.value def __set__(self, instance, value): if not isinstance(value,numbers.Integral): raise ValueError("请输入一个整数") self.value=value def __delete__(self, instance): pass class User: high=IntegerField() #验证代码 if __name__ == '__main__': user=User() user.high='175' #报错,ValueError:请输入一个整数 User.high=175 #正确执行,不报错
En fait, sous le descripteur d'attribut, il est également divisé en
1 Descripteur de données : implémente __set__, __get__
if __name__ == '__main__': user=User() user.high=175 print(user.__dict__) #high是不放入__dict__中的,优先查找数据描述符中的值 user.__dict__["high"]="abc" #这样赋值时可以的,并且可以放入__dict__中 print(user.high) #会报错,因为在调用__get__方法时并没有value属性
class NonField: def __init__(self, high=170): self.value = high def __get__(self, instance, owner): return self.value class User: high = NonField() if __name__ == '__main__': user = User() user.high = '175' #会放入user.__dict__中 print(user.__dict__)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!