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.