Heim  >  Artikel  >  Backend-Entwicklung  >  Codebeispiele zum Binden von Eigenschaften und Methoden zwischen Klassen und Instanzen in Python

Codebeispiele zum Binden von Eigenschaften und Methoden zwischen Klassen und Instanzen in Python

黄舟
黄舟Original
2017-08-20 10:54:021580Durchsuche

Ich habe Python in letzter Zeit nur als Hobby gelernt. Da ich jedoch nicht systematisch Python-Programmierbücher gelesen habe, habe ich das Gefühl, dass die obige Beschreibung zu umständlich ist. Daher habe ich auf der Website einige Lernwebsites gefunden Ich stelle Ihnen hauptsächlich Informationen zum Binden von Attributen und Methoden zwischen Klassen und Instanzen in Python vor. Freunde, die sie benötigen, können darauf verweisen.

Vorwort

Ich fühle mich verwirrt, wenn ich darüber nachdenke, um meine Gedanken zu vertiefen Verstehen Sie, festigen Sie Ihr Gedächtnis und helfen Sie einigen Freunden, diese abstrakte Sprache zu verstehen. Da Python eine dynamische Sprache ist, können Klassen und Instanzen, die auf Klassen basieren, beliebig an Attribute und Methoden gebunden werden.

1. Klassenbindungsattribute

Klassenbindungsattribute können direkt in der Klasse definiert werden, bei denen es sich um generische Eigenschaften handelt.


 class Student(object):
  name = 'Student'

Obwohl dieses Attribut als im Besitz befindliches Attribut klassifiziert ist, kann von allen Instanzen der Klasse darauf zugegriffen werden.


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

Wenn Sie zu diesem Zeitpunkt den Wert von s.name ändern, werden die folgenden Ergebnisse angezeigt:


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

Als nächstes löschen Sie das s.name-Attribut:


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

Es ist ersichtlich, dass das Instanzattribut mit demselben Namen das Klassenattribut überschreibt Durch das Löschen des Instanzattributs wird auf die Instanzklassenattribute zugegriffen.

2. Instanzbindungsattribute

Es gibt zwei Möglichkeiten, Attribute an Instanzen zu binden, eine über die Variable self der Klasse und eine Das andere ist das direkte Zuweisen von Werten zu Instanzen.


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

3. Klassenbindungsmethode

Es gibt zwei Arten von Klassenbindungsmethoden: Die erste besteht in Form von Klassenbindungseigenschaften und die Routine lautet wie folgt:


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#输出

Die zweite besteht darin, MethodType zu verwenden, um Methoden an die Klasse zu binden:


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#输出

Bei dieser Methode ist eines zu beachten:


b=Student()
b.set_score(60)
b.score
a.score
60

Sie finden einen Wert für den Attributwert, der ebenfalls 60 beträgt. Mein persönliches Verständnis hier ist, dass die Punktzahl hier nicht wie bei der vorherigen Methode direkt an die Klasse gebunden ist, sondern einer gemeinsamen Referenzbeziehung wie einer Liste ähnelt,

Das heißt, beide Instanzen a und b beziehen sich darauf punktet als seine eigenen Eigenschaften, und wenn es geändert wird, ändern sich die entsprechenden Eigenschaften aller Instanzen, die darauf verweisen, gemeinsam.

4. Instanzbindungsmethode

Die erste Methode besteht darin, die Instanz aufzurufen, indem die Methode wie oben gezeigt an die Klasse gebunden wird.

Die zweite besteht darin, MethodType zu verwenden, um Methoden an eine einzelne Instanz zu binden.


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#输出

Beachten Sie, dass diese Methode nur zum Beispiel a funktioniert. Wenn alle Instanzen der Klasse Studnet aufrufbar sein müssen, binden Sie die Methode direkt an die Klasse Student .

Zusammenfassung

Das obige ist der detaillierte Inhalt vonCodebeispiele zum Binden von Eigenschaften und Methoden zwischen Klassen und Instanzen in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn