Python - Programmation orientée objet - méthode magique (méthode de double soulignement)

python programmation orient objet thode


Quelle est la méthode magique

InPythonMoyenne,Tous avec __ La méthode du double soulignement,Sont collectivement appelés Magic Method Méthode magique,Aussi appelé double soulignement

Quelles sont les méthodes magiques importantes?

__new__

https://www.cnblogs.com/poloyy/p/15236309.html

__init__

https://www.cnblogs.com/poloyy/p/15189562.html

__str__

https://www.cnblogs.com/poloyy/p/15202541.html

__repr__

https://www.cnblogs.com/poloyy/p/15250973.html

__del__

https://www.cnblogs.com/poloyy/p/15192098.html

__call__

https://www.cnblogs.com/poloyy/p/15253366.html

Autres méthodes magiques plus courantes

__len__

len() L'objet d'appel renvoie __len__ Méthodes return Valeur de,Doit revenir integer

class A:
def __len__(self):
return 4
a = A()
print(len(a))
# Résultats obtenus
4

__hash__

hash() L'objet d'appel renvoie __hash__ Méthodes return Valeur de,Doit revenir integer

# __hash__
class A:
def __hash__(self):
return 123456
a = A()
print(hash(a))
# Résultats obtenus
123456

__eq__

Définir le comportement du signe égal :x == y

class A:
def __init__(self):
self.a = 1
self.b = 2
def __eq__(self, obj):
print("call eq method.")
if self.a == obj.a and self.b == obj.b:
return True
a = A()
b = A()
# L'objet instance a == Quand on agit ,Appel automatique __eq__() Méthodes
print(a == b)
# Résultats obtenus
call eq method.
True

Méthode magique de comparaison des opérateurs

__lt__(self, other)

Définir un comportement inférieur au signe :x < y Appelez x.__lt__(y)

__le__(self, other)

Définir un comportement inférieur ou égal à un signe :x <= y Appelez x.__le__(y)

__ne__(self, other)

Définir le comportement des signes d'inégalité :x != y Appelez x.__ne__(y)

__gt__(self, other)

Définir un comportement supérieur au signe :x > y Appelez x.__gt__(y)

__ge__(self, other)

Définir un comportement supérieur ou égal au signe :x >= y Appelez x.__ge__(y)

Les méthodes magiques sont parfaites

Méthode magique

Sens

Les méthodes magiques de base

__new__(cls[, ...])

1. __new__ Est la première méthode appelée lorsqu'un objet est instantané

__init__(self[, ...])

Constructeur, Méthode d'initialisation appelée lorsqu'une instance est créée

__del__(self)

Analyseur, Méthode appelée lorsqu'une instance est détruite

__call__(self[, args...])

Permettre à une instance d'une classe d'être appelée comme une fonction :x(a, b) Appelez x.__call__(a, b)

__len__(self)

Définir quand len() Comportement au moment de l'appel

__repr__(self)

Définir quand repr() Comportement au moment de l'appel

__str__(self)

Définir quand str() Comportement au moment de l'appel

__bytes__(self)

Définir quand bytes() Comportement au moment de l'appel

__hash__(self)

Définir quand hash() Comportement au moment de l'appel

__bool__(self)

Définir quand bool() Comportement au moment de l'appel ,Ça devrait revenir True Ou False

__format__(self, format_spec)

Définir quand format() Comportement au moment de l'appel

Pour les propriétés

__getattr__(self, name)

Définit le comportement d'un utilisateur lorsqu'il tente d'obtenir une propriété qui n'existe pas

__getattribute__(self, name)

Définit le comportement des propriétés de cette classe lorsqu'elles sont accessibles

__setattr__(self, name, value)

Définit le comportement lorsqu'une propriété est définie

__delattr__(self, name)

Définir le comportement lorsqu'un attribut est supprimé

__dir__(self)

Définir quand dir() Comportement au moment de l'appel

__get__(self, instance, owner)

Définit le comportement d'un descripteur lorsqu'une valeur est obtenue

__set__(self, instance, value)

Définit le comportement du descripteur lorsque sa valeur est modifiée

__delete__(self, instance)

Définit le comportement lorsque la valeur du descripteur est supprimée

Comparer les opérateurs

__lt__(self, other)

Définir un comportement inférieur au signe :x < y Appelez x.__lt__(y)

__le__(self, other)

Définir un comportement inférieur ou égal à un signe :x <= y Appelez x.__le__(y)

__eq__(self, other)

Définir le comportement du signe égal :x == y Appelez x.__eq__(y)

__ne__(self, other)

Définir le comportement des signes d'inégalité :x != y Appelez x.__ne__(y)

__gt__(self, other)

Définir un comportement supérieur au signe :x > y Appelez x.__gt__(y)

__ge__(self, other)

Définir un comportement supérieur ou égal au signe :x >= y Appelez x.__ge__(y)

Opérateur arithmétique

__add__(self, other)

Définir le comportement de l'addition :+

__sub__(self, other)

Définir l'acte de soustraction :-

__mul__(self, other)

Définir le comportement de multiplication :*

__truediv__(self, other)

Définir le comportement de la Division réelle :/

__floordiv__(self, other)

Définir le comportement de la Division des entiers ://

__mod__(self, other)

Définir le comportement de l'algorithme de récupération de modèle :%

__divmod__(self, other)

Définir quand divmod() Comportement au moment de l'appel

__pow__(self, other[, modulo])

Définir quand power() Appelé ou ** Comportement au moment de l'opération

__lshift__(self, other)

Définir le comportement du déplacement à gauche par bit :<<

__rshift__(self, other)

Définir le comportement du déplacement à droite par bit :>>

__and__(self, other)

Définir le comportement des bits et des opérations :&

__xor__(self, other)

Définir le comportement d'une opération Xor bitwise :^

__or__(self, other)

Définir le comportement par bit ou opération :|

Opération inverse

__radd__(self, other)

( Comme ci - dessus , Appelé lorsque l'opérande gauche ne supporte pas l'opération correspondante )

__rsub__(self, other)

( Comme ci - dessus , Appelé lorsque l'opérande gauche ne supporte pas l'opération correspondante )

__rmul__(self, other)

( Comme ci - dessus , Appelé lorsque l'opérande gauche ne supporte pas l'opération correspondante )

__rtruediv__(self, other)

( Comme ci - dessus , Appelé lorsque l'opérande gauche ne supporte pas l'opération correspondante )

__rfloordiv__(self, other)

( Comme ci - dessus , Appelé lorsque l'opérande gauche ne supporte pas l'opération correspondante )

__rmod__(self, other)

( Comme ci - dessus , Appelé lorsque l'opérande gauche ne supporte pas l'opération correspondante )

__rdivmod__(self, other)

( Comme ci - dessus , Appelé lorsque l'opérande gauche ne supporte pas l'opération correspondante )

__rpow__(self, other)

( Comme ci - dessus , Appelé lorsque l'opérande gauche ne supporte pas l'opération correspondante )

__rlshift__(self, other)

( Comme ci - dessus , Appelé lorsque l'opérande gauche ne supporte pas l'opération correspondante )

__rrshift__(self, other)

( Comme ci - dessus , Appelé lorsque l'opérande gauche ne supporte pas l'opération correspondante )

__rand__(self, other)

( Comme ci - dessus , Appelé lorsque l'opérande gauche ne supporte pas l'opération correspondante )

__rxor__(self, other)

( Comme ci - dessus , Appelé lorsque l'opérande gauche ne supporte pas l'opération correspondante )

__ror__(self, other)

( Comme ci - dessus , Appelé lorsque l'opérande gauche ne supporte pas l'opération correspondante )

Opération d'affectation progressive

__iadd__(self, other)

Définir le comportement de l'addition d'affectation :+=

__isub__(self, other)

Définir le comportement de la soustraction d'affectation :-=

__imul__(self, other)

Définir le comportement de la multiplication des assignations :*=

__itruediv__(self, other)

Définir le comportement de la Division de vérité assignée :/=

__ifloordiv__(self, other)

Définir le comportement de la Division des entiers d'affectation ://=

__imod__(self, other)

Définir le comportement de l'algorithme de prise de module d'assignation :%=

__ipow__(self, other[, modulo])

Définir le comportement d'une opération de puissance assignée :**=

__ilshift__(self, other)

Définir le comportement d'une affectation décalée à gauche :<<=

__irshift__(self, other)

Définit le comportement de déplacement à droite d'une affectation :>>=

__iand__(self, other)

Définir le comportement des bits d'affectation et des opérations :&=

__ixor__(self, other)

Définir le comportement de l'attribution d'une Xor bitwise :^=

__ior__(self, other)

Définir le comportement de l'assignation de bits ou d'actions :|=

Opérateur unique

__pos__(self)

Définir le comportement du signe positif :+x

__neg__(self)

Définir le comportement du signe négatif :-x

__abs__(self)

Définir quand abs() Comportement au moment de l'appel

__invert__(self)

Définir l'inverse bitwise :~x

Conversion de type

__complex__(self)

Définir quand complex() Comportement au moment de l'appel ( Une valeur appropriée doit être retournée )

__int__(self)

Définir quand int() Comportement au moment de l'appel ( Une valeur appropriée doit être retournée )

__float__(self)

Définir quand float() Comportement au moment de l'appel ( Une valeur appropriée doit être retournée )

__round__(self[, n])

Définir quand round() Comportement au moment de l'appel ( Une valeur appropriée doit être retournée )

__index__(self)

1. Lorsque l'objet est appliqué à une expression de tranche , Mise en œuvre de la force de façonnage 2. Si vous définissez un type numérique personnalisé qui peut être utilisé lors de la découpe , Tu devrais définir __index__3. Si __index__ Défini ,Et __int__ Doit également être défini , Et renvoie la même valeur

Gestion du contexte(with Déclarations)

__enter__(self)

1. Définir quand with Comportement d'initialisation Au moment de l'instruction 2. __enter__ La valeur de retour de with Le but de la déclaration ou as Le nom suivant est lié

__exit__(self, exc_type, exc_value, traceback)

1. Définir ce que le gestionnaire de contexte doit faire lorsqu'un bloc de code est exécuté ou terminé 2. Généralement utilisé pour traiter les exceptions , Nettoyer le travail ou faire le travail quotidien après l'exécution du bloc de code

Type de conteneur

__len__(self)

Définir quand len() Comportement au moment de l'appel (Renvoie le nombre d'éléments dans le conteneur)

__getitem__(self, key)

Définir le comportement pour obtenir l'élément spécifié dans le conteneur ,équivalent à self[key]

__setitem__(self, key, value)

Définit le comportement de l'élément spécifié dans le conteneur de configuration ,équivalent à self[key] = value

__delitem__(self, key)

Définit le comportement de suppression d'un élément spécifié dans un conteneur ,équivalent à del self[key]

__iter__(self)

Définit le comportement d'un élément lorsqu'il est itéré dans un conteneur

__reversed__(self)

Définir quand reversed() Comportement au moment de l'appel

__contains__(self, item)

Définir lorsque l'opérateur de test membre est utilisé (in Ou not in)Le comportement du temps

Revenez en arrière et expliquez ce que

Participation à cet articleTencent Cloud Self - media Sharing Plan,Bienvenue à la lecture,Partager ensemble.

版权声明
本文为[Notes de test pour les petits ananas]所创,转载请带上原文链接,感谢
https://javamana.com/2021/09/20210914180056945y.html

  1. Java 16 is coming online. You can't even use the features of Java 8, can you?
  2. Java (3) basic data types and their type conversion
  3. 一位Java大牛的BAT面试心得与经验总结,2021年Java春招面试经历,
  4. 一举拿下腾讯美团滴滴offer,快来瞧瞧这份Spring面试小抄!
  5. 一个Java应届生从上海离职,万字长文总结Java多进程,
  6. Seven design principles of java object-oriented design pattern
  7. 一個Java應届生從上海離職,萬字長文總結Java多進程,
  8. Un nouvel étudiant Java a quitté Shanghai et a résumé plusieurs processus Java.
  9. Prenez d'un coup l'offre de Tencent meituan et jetez un coup d'oeil à cette copie de l'entrevue de printemps!
  10. L'expérience et l'expérience d'un Maverick Java en matière d'entrevue sur les MTD, l'expérience de l'entrevue d'embauche du printemps Java en 2021,
  11. Interface graphique X: mise à jour des tables de rendu et optimisation du Code (compilation intégrée 10)
  12. Widget de vérification de fichiers personnalisés Linux
  13. Java thread pool - work queue
  14. [Part 7] - Summary of B2B2C e-commerce technology of spring cloud live mall managed by git branch
  15. Reflection type of Java Foundation
  16. Want to get started with data structures, but always fall under the pomegranate skirt of the linked list?
  17. Interviewer: do redis transactions satisfy atomicity?
  18. 一篇文章教你搞定计算机网络面试,350道Java面试真题分享,
  19. 一条正确的Java职业生涯规划,揭秘今年Java春招面试必问问题有哪些?
  20. 一名毕业三年的女程序媛面试头条经验,关于Redis主从节点数据过期一致性的思考,
  21. Huawei cloud guassdb (for redis) released a new version: Lua script and SSL connection encryption
  22. Java thread pool - work queue
  23. 一名畢業三年的女程序媛面試頭條經驗,關於Redis主從節點數據過期一致性的思考,
  24. Trois ans d'expérience d'entrevue avec une femme de programmation diplômée, une réflexion sur la cohérence de l'expiration des données de redis Master slave Node,
  25. Un plan de carrière Java correct, découvrez les questions que vous devez poser lors de l'entrevue d'embauche du printemps Java de cette année.
  26. 万字详解微服务的哨兵机制,架构师带你玩转Redis高性能缓存设计实战,
  27. Un article vous a appris à gérer les entrevues sur le Web, à partager 350 vraies questions d'entrevue Java,
  28. Jquery Tools Methodology collation, Sharing a little interview Experience
  29. Tutoriel de développement Java, compétences de base nécessaires pour interviewer un programmeur Java dans une grande usine,
  30. "Anti Mafia storm" has just finished, another criminal investigation play has come, and the supporting actor is more popular than the protagonist
  31. 萬字詳解微服務的哨兵機制,架構師帶你玩轉Redis高性能緩存設計實戰,
  32. L'architecte vous guidera dans la conception de cache haute performance de redis.
  33. Linux驱动开发: 杂项字符设备
  34. Jquery plug - in urianchor, app front end Development
  35. Linux驅動開發: 雜項字符設備
  36. Développement de pilotes Linux: périphériques de caractères divers
  37. Utilisez @ async dans Spring boot pour effectuer des appels asynchrones et accélérer l'exécution des tâches!
  38. $in jquery, Visualized Web Development Tool
  39. Le développement Java doit être fait. Les entrevues https demandent souvent une analyse complète.
  40. 不明白JVM虚拟机还怎么面试,一起刷完了这份1307页的Java面试宝典吧,
  41. 不断提升自己创造溢价的能力,字节跳动 阿里 华为 腾讯等大厂Java面试题,
  42. Jdk's Past Life: The Classic Features of Thin Number - java5 - - - 15 -, webfront Development
  43. Résumé des questions d'entrevue pour les ingénieurs en développement Java, analyse des questions d'entrevue à haute fréquence Dubbo,
  44. Améliorer continuellement leur capacité à créer des primes, et les questions d'entrevue Java d'Alibaba Huawei Tencent et d'autres grandes usines sont sautées en octets.
  45. Install docker YJ version of openSUSE 11.3
  46. Je ne comprends pas comment la machine virtuelle JVM peut encore interviewer, et j'ai terminé ce dictionnaire d'entrevue Java de 1307 pages.
  47. 中软国际Java机试,如何写出高效率的SQL?
  48. 中级Java工程师面试,阿里 头条 腾讯等大厂Java笔试题目分享,
  49. 两年Java开发经验,为什么spring能最好地改变Java?
  50. Echarts realizes the rotation of the moon (super simple, you can see it at a glance)
  51. Deux ans d'expérience dans le développement de Java, pourquoi Spring peut - il le mieux changer Java?
  52. Entretien d'ingénieur Java intermédiaire, partage de sujets d'examen écrit Java de grandes usines comme Alibaba headline Tencent,
  53. Zhongsoft International Java Machine test, comment écrire un SQL efficace?
  54. Reflection type of Java Foundation
  55. Comment gérer efficacement les changements dans les ressources k8s?Analyse du mécanisme de mise en œuvre de k8s informer
  56. Installation de jdk1.8
  57. MySQL column - Linux underlying interaction and RAID storage architecture
  58. Interviewer: do redis transactions satisfy atomicity?
  59. 兩年Java開發經驗,為什麼spring能最好地改變Java?
  60. Migration practice from zookeeper to Nacos