Maison > Article > développement back-end > À propos des classes et des méthodes dans la programmation orientée objet Python
Classes et instances
Python est un langage orienté objet, et les concepts les plus importants de l'orientation objet sont les classes et les instances. Je les ai très bien compris quand je l'ai appris pour la première fois. Concept, jusqu'à ce que le professeur dise "les oiseaux d'une plume s'assemblent". >
Une classe consiste en fait à regrouper des choses ayant les mêmes caractéristiques dans une seule catégorie, par exemple, les humains
Nous avons défini. la classe humaine, mais l'humain a certaines caractéristiques, comme deux yeux et une bouche, nous les ajoutons dansclass Person(object): passJ'ai déjà écrit quelques informations sur la personne, mais la personne a toujours un nom, comme moi le vison. Eh bien, je ne peux pas me maltraiter, je dois les mettre dans Ajoutez-le dans
class Person(object): eyes = 2 mouth = 1C'est tellement parfait, une personne l'a finalement terminé. Cela a pris un jour à Dieu et cela ne m'a pris qu'une minute (je plaisante), nous avons lu l'information. Les humains ont deux yeux, une bouche, et leur nom est vison. . - - ! Quelque chose ne va pas, mon nom est vison ~ Pourquoi les humains sont-ils appelés vison ?
class Person(object): eyes = 2 mouth = 1 name = minkvison est le nom des humains, le nom des humains Mink est évidemment faux, "wo" devrait être un individu humain, un seul exemple.
class Person(object): eyes = 2 mouth = 1 def __init__(self, name): self.name = name me = Person('mink')
class Person(object): eyes = 2 mouth = 1 def __init__(self, name) self.name = name def jineng(self, txt): print "%s %s" % (self.name, txt) me = Person('mink') me.jineng("我不受重力影响, 我会飞")Méthode de classe et méthodes statiquesVous pouvez souvent voir @classmethod et @staticmethod en python, appelées méthodes de classe et méthodes d'instance.
class Animal(object): name = 'lili' age = 1 cat = Animal() print cat.name, cat.age # print 'lili' 1de la classe
C'est-à-dire que cette méthode ajoutée par défaut est une méthode d'instance. La méthode d'instance modifie les attributs de l'instance, tandis que les attributs de la classe ne changent pas
# 显示内容是一样的 print cat.name, cat.age print Animal.name, Animal.age 给Animal类添加一个方法(函数) class Animal(object): name = 'lili' age = 1 def edit(self, name, age): self.name = name self.age = age cat = Animal() cat.edit('rol', 2) print cat.name, cat.age # print 'rol' 2 print Animal.name, Animal.age # print 'lili' 1
Explication selon laquelle les méthodes d'instance ne peuvent pas modifier les attributs de la classe, mais que dois-je faire si je souhaite modifier les attributs de la classe
# 我们修改一下这个函数 def edit(self, name, age): name = name self.age = age cat = Animal() cat.edit('rol', 2) print cat.name, cat.age # pirnt 'rol' 2 print Animal.name, cat.age # print 'lili' 1
Ce qu'il faut noter ici, c'est que le premier paramètre de la fonction d'édition passe de self à cls. En python, il est recommandé d'utiliser cls dans la méthode de classe et le paramètre de. la méthode d'instance est self, et il est expliqué ici que l'instance peut être utilisée Méthode de classe (fonction)
Ensuite j'ajoute une méthode init à cette classe pour initialiser les attributs# 再一次修改edit @classmethod def edit(cls, name, age): cls.name = name cls.age = age cat = Animal() cat.edit('rol', 2) print cat.name, cat.age # print 'rol' 2 print Animal.name, Animal.age # print 'rol' 2
Après avoir ajouté __init__, cat n'utilise pas ensuite les attributs de la classe, et modifie la méthode d'édition sans changer les attributs de l'instance cat
class Animal(object): name = 'lili' age = 1 def __init__(self, name, age): self.name = name self.age = age ... cat = Animal('kuku', 4) cat.edit('rol', 2) print cat.name, cat.age # print 'kuku' 4 print Animal.name, Animal.age # print 'rol' 2<.>Cela montre que la méthode statique ne peut pas utiliser les attributs et les méthodes de l'instance, bien sûr, vous ne pouvez pas utiliser les classes. Ensuite, l'inverse
# 添加staticmethod @staticmethod def say_name(name=None): if not name: name = self.name print 'my name is %s.' % name cat = Animal('kaka', 3) cat.say_name() # 运行的话会报 NameError: global name 'self' is not defined # 那是不是没给他添加self字段, 所以没找到 def say_name(self, name=None): ... cat.say_name() # TypeError: say_name() takes at least 1 argument(0 given), 显示缺少参数
<.>
la méthode statique est accessible via les méthodes de classe et les méthodes d'instance.
Pour résumer :
# 我们修改一下代码 # 先创建一个实例的方法, 他使用类的staticmethod @staticmethod def say_name(name): print 'my name is %s.' % name def say(self): self.say_name(self.name) @classmethod def _say(cls): cls.say_name(cls.name) cat = Animal('kaka', 3) cat.say() cat._say()Méthode statique (staticmethod)La méthode statique ne peut pas utiliser la attributs et méthodes de l'instance
La méthode statique ne peut pas utiliser les attributs et les méthodes de la classe
Méthode statique Peut être appelée via une classe ou une instance
Les méthodes de classe peuvent être appelées via des classes ou des instances
En savoir plus sur la programmation orientée objet Python Pour les articles liés aux classes et aux méthodes, veuillez prêter attention au site Web PHP chinois !