Maison  >  Article  >  développement back-end  >  Exemples de code sur la façon de lier des propriétés et des méthodes entre classes et instances en Python

Exemples de code sur la façon de lier des propriétés et des méthodes entre classes et instances en Python

黄舟
黄舟original
2017-08-20 10:54:021582parcourir

J'ai récemment appris Python, uniquement comme passe-temps. Cependant, je n'ai pas systématiquement lu de livres de programmation Python. Je pense que la description ci-dessus est trop lourde, j'ai donc trouvé quelques sites d'apprentissage sur le site Web. vous présente principalement Pour plus d'informations sur la façon de lier des attributs et des méthodes entre classes et instances en Python, les amis qui en ont besoin peuvent s'y référer.

Préface

Je me sens confus lorsque j'appelle des méthodes de classes et d'instances python. Après y avoir réfléchi, j'enregistre mes pensées pour approfondir vos pensées. Comprendre, consolider votre mémoire et aider certains amis qui souhaitent apprendre Python à comprendre ce langage abstrait. Puisque Python est un langage dynamique, les classes et les instances créées sur la base des classes peuvent être arbitrairement liées aux attributs et aux méthodes.

1. Attributs de liaison de classe

Les attributs de liaison de classe peuvent être définis directement dans la classe, qui sont des propriétés génériques.


 class Student(object):
  name = 'Student'

Bien que cet attribut soit classé comme possédé, il est accessible par toutes les instances de la classe.


class Student(object):
 name = 'Student'
s = Student() # 创建实例s
print(s.name) # 打印name属性,因为实例并没有name属性,所以会继续查找class的name属性
print(Student.name) # 打印类的name属性
Student
Student

Si vous modifiez la valeur de s.name à ce moment, les résultats suivants se produiront :


s.name = 'xiaoming' # 给实例绑定name属性
print(s.name) # 由于实例属性优先级比类属性高,因此,它会屏蔽掉类的name属性
print(Student.name) # 但是类属性并未消失,用Student.name仍然可以访问
xiaoming
Student

Supprimez ensuite l'attribut s.name :


del s.name # 如果删除实例的name属性
print(s.name) # 再次调用s.name,由于实例的name属性没有找到,类的name属性就显示出来了
Student

On peut voir que l'attribut d'instance avec le même nom écrasera l'attribut de classe après. en supprimant l'attribut d'instance, l'instance sera accessible vers le haut.

2. Attributs de liaison d'instance

Il existe deux façons de lier des attributs à des instances, l'une consiste à utiliser la variable self de la classe et l'autre. l'autre est Attribuer des valeurs directement aux instances.


class Student(object):
 def __init__(self, name):
  self.name = name
s = Student('Bob')#方法一 通过类的self变量绑定属性
s.score = 90#方法二 直接赋值

3. Méthode de liaison de classe

Il existe deux types de méthodes de liaison de classe, La première se présente sous la forme de propriétés de liaison de classe, et la routine est la suivante :


Class Student(object):
 pass
a=Student()#创建实例

def set_score(self,score):
 self.score=score

Student.set_score=set_score#类绑定方法
a.set_score(99)#调用方法
a.score
99#输出

La seconde consiste à utiliser MethodType pour lier des méthodes à la classe :


Class Student(object):
 pass
a=Student()#创建实例

def set_score(self,score):
 self.score=score

from types import MethodType
Student.set_score = MethodType(set_score, Student)

a.set_score(99)#调用方法
a.score
99#输出

Il y a une chose à noter à propos de cette méthode si vous continuez à créer une instance b :


b=Student()
b.set_score(60)
b.score
a.score
60
vous trouverez un La valeur du score d'attribut devient également 60. Ma compréhension personnelle ici est que le score ici n'est pas directement lié à la classe comme la méthode précédente, mais est similaire à une relation de référence partagée comme une liste,

c'est-à-dire que les deux instances a et b font référence à ceci score comme ses propres propriétés, et lorsqu'il est modifié, les propriétés correspondantes de toutes les instances qui le référencent changeront ensemble.

4. Méthode de liaison d'instance

La première méthode consiste à appeler l'instance en liant la méthode à la classe, comme indiqué ci-dessus.

La seconde consiste à utiliser MethodType pour lier les méthodes à une seule instance.


Class Student(object):
 pass
a=Student()#创建实例

def set_score(self,score):
 self.score=score

from types import MethodType
a.set_score = MethodType(set_score, a)

a.set_score(99)#调用方法
a.score
99#输出
Notez que cette méthode ne fonctionne que par exemple a. Si vous avez besoin que toutes les instances de la classe Studnet soient appelables, liez directement la méthode à la classe Student .

Résumé

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn