Python L'objet est né avec des méthodes magiques,Ils sont toujours entourés d'un double soulignement,Ils sont orientés objet Python Tout..Ce sont des façons spéciales d'ajouter de la magie à votre classe,Si votre objet est implémenté(Surcharge)Il y a une méthode magique,Cette méthode sera alors automatiquement utilisée dans des cas particuliers Python Appelé.
Créer un objet(Par object Offre,En général, il n'est pas nécessaire de passer outre),Est la première méthode appelée lors de l'Instanciation de l'objet.Python Dans __new__()
Les méthodes sont nouvelles dans les nouvelles classes,Python Méthode de construction dans __init__()
Responsable de l'Instanciation de la classe,Et __init__()
Avant l'exécution,__new__()
Responsable de la fabrication d'un tel objet d'instance,Pour que __init__()
Pour rendre l'objet instance plus riche(Ajouter des attributs, etc).
Premier paramètre cls Représente la classe contenant la méthode,C'est un paramètre automatique;Paramètres more Est un paramètre de longueur indéterminée,Il n'y a pas de.
Un objet(Est généralement un objet d'instance de cette classe).
Utilisé principalement pour hériter d'un type immuable,Par exemple, str Attendez.
class MyText(str):
def __new__(cls, string):
# Cette méthode permet de modifier l'objet avant l'Instanciation
string = string.upper()
# Retour à l'objet
return super().__new__(cls, string)
# return string
# Ce genre de retour sample Et les données de type chaîne ,En même temps__init__Et ne sera pas exécuté
def __init__(self, str1):
self.str1 = str1
sample = MyText("this is a example")
print(sample)
Résultats de la mise en œuvre:
THIS IS A EXAMPLE
class Person(object):
def __new__(cls, *args, **kwargs):
print("call __new__()")
instance = super().__new__(cls)
return instance
def __init__(self):
print("call __init__()")
p = Person()
Résultats de la mise en œuvre:
call __new__()
call __init__()
class Person1(object):
def __new__(cls, *args, **kwargs):
print("call Person __new__()")
instance = super().__new__(cls)
return instance
class Student(object):
def __new__(cls, *args, **kwargs):
print("call Student __new__()")
instance = object.__new__(Person1, *args, **kwargs)
return instance
stu = Student()
print("Type stu =", type(stu))
Résultats de la mise en œuvre:
call Student __new__()
Type stu = <class '__main__.Person1'>
Python Dans __new__()
La méthode est une méthode statique responsable de la création d'une instance de classe , Et cette méthode sera utilisée dans init() Appelé avant d'initialiser la méthode .En général, On écrase __new__()
Avant la mise en œuvre, Tout d'abord. super Appelé parent new Méthodes.
Python Dans __new__()
Les méthodes sont nouvelles dans les nouvelles classes,Python Méthode de construction dans __init__()
Responsable de l'Instanciation de la classe,Et __init__()
Avant l'exécution,__new__()
Responsable de la fabrication d'un tel objet d'instance,Pour que __init__()
Pour rendre l'objet instance plus riche(Ajouter des attributs, etc).
En même temps,__new__()
La méthode détermine également si vous souhaitez utiliser ce __init__()
Méthodes,Parce que __new__()
Vous pouvez appeler la méthode de construction d'une autre classe ou renvoyer directement un autre objet comme instance de cette classe .
Lors de l'Instanciation d'un objet,Appelez d'abord__new__ Méthode d'attribution de l'espace de stockage à l'objet , Et renvoie la référence de l'objet . Une fois que l'interpréteur a obtenu la référence de l'objet , Il est passé comme premier argument à __init__Méthodes. Si aucun objet d'instance de cette classe n'est retourné ,Et__init__ La méthode ne serait pas appelée .