29 méthode contraignante et méthode non contraignante

Tout d'abord, la méthode de liaison

Les fonctions définies dans la classe sont divisées en deux catégories: les méthodes liées et les méthodes non liées

Les méthodes de liaison sont divisées en méthodes objet liées aux objets et méthodes de classe liées aux classes .

La fonction normalement définie dans la classe est liée à l'objet par défaut, et après avoir ajouté un décorateur @classmethod à une fonction, la fonction est liée à la classe.

Importer les paramètres        # fichier défini dans le fichier de configuration aux données stockées dans sa propre 

classe Mysql:
     DEF  le __init__ (Auto, IP, Port): 
        self.ip = IP 
        self.port = Port 

    DEF FUNC (auto):
         Imprimer ( ' % S: S% ' % (self.ip, self.port)) 

    @classmethod # la fonction suivante liée à une méthode de classe décorée 
    DEF from_conf (CLS):
         Print (CLS)
         retour CLS (settings.IP, settings.PORT) 

# obj1 = Mysql ('1.1.1.1', 3306) 

obj2 = Mysql.from_conf ()
imprimer (obj2. __dict__ )

PS: La méthode liée à la classe est spécifiquement pour la classe, mais en fait, l'objet peut également être appelé, mais le premier paramètre transmis automatiquement est toujours la classe, ce qui signifie qu'un tel appel n'a pas de sens et est facile à provoquer Confusion, c'est également l'une des différences entre le système d'objets de Python et d'autres systèmes d'objets de langage orienté objet. Par exemple, dans Smalltalk et Ruby, la méthode liée à la classe est strictement distinguée de la méthode liée à l'objet.

 

Deuxièmement, la méthode non contraignante

Après avoir ajouté un décorateur @staticmethod à une fonction de la classe , la fonction devient une méthode indépendante, également appelée méthode statique. Cette méthode ne lie pas la classe ou de l' objet, la classe d'objet peut venir à l' appeler, mais il est une fonction normale seulement, et donc ne pas automatiquement la valeur puis dire

classe Mysql:
     DEF  le __init__ (Auto, IP, Port): 
        self.nid = self.create_id () 
        self.ip = IP 
        self.port = Port 

    @staticmethod # Les fonctions suivantes décorées comme méthode statique 
    DEF create_id ():
         Importation uuid
         return uuid.uuid4 () 

    @classmethod 
    def f1 (cls):
         pass 

    def f2 (self):
         pass 
obj1 = Mysql ( ' 1.1.1.1 ' , 3306 ) 

Mysql.create_id () 
obj1.create_id ()

print (Mysql.create_id)   # 普通 函数 , 无 绑定 方法 <fonction Mysql.create_id à 0x00000173EFB9B310>   
print (Mysql.f1)          # <méthode liée Mysql.f1 de <classe '__main __. Mysql' >> 
print (obj1.f1 )           # <méthode liée Mysql.f1 de <classe '__main __. Mysql' >>

Résumé: l'utilisation de méthodes liées et de méthodes non liées: si une fonction est nécessaire dans la classe, le code d'implémentation de la fonction doit se référer à l'objet pour le définir comme une méthode objet, et s'il doit se référer à la classe, le définir comme une méthode de classe sans référence Les classes ou les objets les définissent comme des méthodes statiques.

 

Je suppose que tu aimes

Origine www.cnblogs.com/zhubincheng/p/12684417.html
conseillé
Classement