程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Méthode magique Python (1): Nouveau (CLS [, * args]) Méthode

編輯:Python

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é.

Méthode magique de base——__new __

Fonction

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).

Paramètres

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.

Valeur de retour

Un objet(Est généralement un objet d'instance de cette classe).

Scénario d'application

Utilisé principalement pour hériter d'un type immuable,Par exemple, str Attendez.

Exemple d'utilisation

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'>

Résumé

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 .


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved