2016-06-19 29 views
0

Ich habe begonnen, objektorientierte Konzepte in Python zu lernen. Ich habe diesen Beispielcode unten bekam:Zugriff auf Methodenvariablen einer Klasse in einer anderen Python-Klasse

class Student(object): 
    def __init__(self, name, age): 
    self.name = name 
    self.age = age 


class School(object): 
    students = [] 
    def __init__(self, name): 
    self.name = name 

    def add_student(self, student): 
    self.students.append(student) 

    def show_students(self): 
    print("{0} Student Roster".format(self.name)) 
    for s in self.students: 
     print("{0}: {1}".format(s.name, s.age)) 




my_school = School("Quora University") 
first_student = Student("Rongan Li", 20) 
second_student = Student("Jason Kane", 20) 
my_school.add_student(first_student) 
my_school.add_student(second_student) 
my_school.show_students() 

Frage: Im def show_students Methode der Schulklasse, wie sie die Konstrukts Variablen der Klasse Schüler zugreifen, ohne Instanz dieser Klasse?

+0

Ich denke, es gibt eine tiefere Frage hier: Sollte nicht "Studenten" eine Instanzvariable eines "Schule" -Objekts sein, im Gegensatz zu einer * Klasse * -Variable? Die Art und Weise, wie es eingerichtet wird, indem ein Schüler zu * jeder * Schule hinzugefügt wird, lässt sie als Schüler * aller * Schulen erscheinen. So sieht es zumindest für mich aus. –

Antwort

0
first_student = Student("Rongan Li", 20) 
second_student = Student("Jason Kane", 20) 

Diese Linien erstellen Objekt der Schüler-Klasse, first_student die Namen 'Rongan Li' und Alter '20' hat.

second_student den Namen 'Jason Kane' und Alter '20'

Jetzt hat, fügen Sie diese 2 Objekte in die Liste.

my_school.add_student(first_student) 
my_school.add_student(second_student) 

Nun, wenn Sie in der Liste

for s in self.students: 
     print("{0}: {1}".format(s.name, s.age)) 

‚s‘ iterieren geht auf das erste Element der Liste, und da es ein Objekt der Klasse Schüler ist, ‚s‘ wird Gegenstand der Schüler-Klasse . Jetzt, da 's' das erste Element in der Liste ist und an erster Stelle haben Sie 'Rongal Li' und 20 hinzugefügt. Also, s hat 2 Eigenschaften Name und Alter. Wenn Sie abname, druckt es "Rongal Li" und s.age druckt 20

Dann geht es zum nächsten Element und der gleiche Prozess wird wiederholt.

0

in den Verfahren show_students gibt es eine for-Schleife:

for s in self.students: 
    print("{0}: {1}".format(s.name, s.age)) 

es über die Liste der Schüler nach der Methode hinzufügen, damit innerhalb der Schleife die Variable „s“ repräsentieren eine Instanz Student Klasse so s.name hinzugefügt Schlaufen ist eine legitime Möglichkeit für den Zugriff auf eine Instanzvariable mit einer Instanz der Klasse

0

Die Schüler werden School.students Liste über die add_student Methode hinzugefügt.

my_school.add_student(first_student) 
my_school.add_student(second_student) 

Diese beiden Linien fügen Sie zwei Verweise auf die School.students Liste in my_school. Nun hat die Liste zwei Referenzen, die auf first_student und second_student zeigen.

Sie können an dieser Stelle in my_school der Liste denken als

students = [Pointer to first_student, Pointer to second_student] 

Wenn Sie my_school.show_students() nennen, my_school.students Liste (die Liste oben) zugegriffen wird und durch die Verweise auf first_student und second_student in der Liste, Sie Greifen Sie auf das ursprüngliche Objekt first_student und das Objekt second_student zu und können Sie deren Eigenschaften abrufen.

Verwandte Themen