Ajoutez les méthodes correspondantes dans la classe personnalisée afin que les instances créées par la classe personnalisée puissent effectuer des opérations de fonction intégrées comme des objets intégrés. Il s'agit d'une réécriture de fonction.
Fonction objet en chaîne : repr(obj), renvoie une chaîne d'expression qui peut représenter cet objet, généralement eval(repr(obj)) == obj (cette chaîne est généralement interprétée et exécutée par python utilisé pour exécuter le programmeur), str(obj) renvoie une chaîne via l'objet donné (cette chaîne est généralement lue par les humains).
Méthode de réécriture de l'objet en fonction de chaîne :
Méthode repr(obj) de la fonction de réécriture :
Méthode de réécriture dedef __repr__(self):
fonction str(obj) :
def __str__(self):
Explication :
1. La fonction str(obj) recherche d'abord, obj. méthode, appelez cette méthode et renvoyez le résultat
2 S'il n'y a pas de méthode obj.__str__(), renvoyez le résultat de la méthode obj.__repr__() et renvoyez
3. La méthode obj.__repr__ n'existe pas, alors l'appel de la méthode d'instance __repr__ de la classe d'objet affiche une chaîne au format <__main__.XXXX objet à 0xAABBCCDD>
Exemple :
# 此示例示意通过重写 repr 和 str方法改变转为字符串的规则 class MyNumber: def __init__(self, value): '构造函数,初始化MyNumber对象' self.data = value def __str__(self): '''转换为普通人识别的字符串''' # print("__str__方法被调用!") return "自定义数字类型对象: %d" % self.data def __repr__(self): '''转换为eval能够识别的字符串''' return 'MyNumber(%d)' % self.data n1 = MyNumber(100) n2 = MyNumber(200) print('repr(n1) ====>', repr(n1)) print('str(n2) ====>', str(n2))
Recommandations associées : "Tutoriel vidéo Python"
Comment réécrire d'autres fonctions intégrées :
__abs__ abs( obj) fonction
__len__ len(obj) fonction (doit renvoyer un entier)
__reversed__ reverse(obj) fonction (doit renvoyer un objet itérable
__round__ round(obj) fonction
Exemple :
# 此示例示意abs 函数的重写 class MyInteger: def __init__(self, v): self.data = v def __repr__(self): return 'MyInteger(%d)' % self.data def __abs__(self): v = abs(self.data) return MyInteger(v) # 用v创建另一个MyInteger对象 def __len__(self): return 10000 I1 = MyInteger(-10) print('I1 =', I1) I2 = abs(I1) print("I2 =", I2) print('len(I2)=', len(I2)) # 10000
Réécriture de la fonction de conversion numérique :
__complex__ fonction complexe(obj)
Fonction __int__ int(obj)
Fonction __float__ float(obj)
Fonction __bool__ bool(obj) (voir surcharge de la fonction de test booléen ci-dessous)
Exemple :
# 此示例示意数据转换构造函数的重写方法 class MyNumber: def __init__(self, value): self.data = value def __repr__(self): return 'MyNumber(%d)' % self.data def __int__(self): 'int函数的重载' return self.data n1 = MyNumber(100) x = int(n1) print(n1) print(bool(n1)) # True n2 = MyNumber(0) print(bool(n2)) # True
Réécriture de la fonction de test booléen :
Format :
__bool__
Fonction :
Utilisé pour bool(obj) Valeur de fonction
Utilisé dans l'expression de la valeur de vérité de l'instruction if
Utilisé pour la valeur de vérité de l'instruction while
description dans l'expression :
1. Lorsqu'il existe une méthode __bool__(self) dans la classe personnalisée, la valeur de retour de cette méthode est utilisée comme bool( obj ) valeur de retour
2. Lorsqu'il n'y a pas de méthode __bool__(self), bool(x) renvoie si la valeur de retour de la méthode __len__(self) est nulle pour tester la valeur booléenne
3. Lorsqu'il n'y a pas de méthode __len__(self), True
est renvoyé directement Exemple :
# 此示例示意bool(x) 函数的重写 class MyList: '自定义类型的列表,用来保存数据,内部用一个列表来存储数据' def __init__(self, iterable=()): self.data = [x for x in iterable] def __repr__(self): return 'MyList(%s)' % self.data def __len__(self): '''返回长度''' print("__len__方法被调用") return len(self.data) def __bool__(self): print("__bool__方法调用") for x in self.data: if not x: return False return True # return False # <<=== 所有对象都为False myl = MyList([0, -1, 2, -3]) # myl = MyList() print(myl) print(bool(myl)) if myl: print("myl为真值") else: print('myl为假值')
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!