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): pass
class Person(object): eyes = 2 mouth = 1
class Person(object): eyes = 2 mouth = 1 name = mink
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("我不受重力影响, 我会飞")
class Animal(object): name = 'lili' age = 1 cat = Animal() print cat.name, cat.age # print 'lili' 1
<🎜. >
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
# 添加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()
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 !