在另一个python类

时间:2016-06-19 02:59:57

标签: python python-2.7 python-3.x

我已经开始在python中学习面向对象的概念。我有以下示例代码:

 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()

问题:  在School class的def show_students方法中,他们如何在没有该类实例的情况下访问类student的构造变量?

3 个答案:

答案 0 :(得分:0)

在方法show_students中有一个for循环:

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

它循环遍历由方法添加的学生列表,因此在循环内部变量" s"表示学生类的实例,因此s.name是通过使用类的实例访问实例变量的合法方式

答案 1 :(得分:0)

通过School.students方法将学生添加到add_student列表中。

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

这两行在School.students中添加了对my_school列表的两个引用。现在,列表中有两个引用指向first_studentsecond_student

此时您可以将my_school中的列表视为

students = [Pointer to first_student, Pointer to second_student]

当您致电my_school.show_students()时,会访问my_school.students列表(上面的列表),并通过列表中first_studentsecond_student的引用访问原始{ {1}}对象和first_student对象,然后可以检索它们的属性。

答案 2 :(得分:0)

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

这些行创建了学生班级的对象,first_student,其名称为“Rongan Li'和年龄' 20'。

second_student的名字' Jason Kane'和年龄' 20'

现在,您将这两个对象添加到列表中。

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

现在,当您在列表中进行迭代时

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

' S'转到列表的第一个元素,因为它是类Student的对象,' s'成为学生班的对象。现在,因为'是列表中的第一个元素,并且在第一个位置添加了“Rongal Li'和20。所以,s有2个属性名称和年龄。当你做s.name时,会打印出“Rongal Li”字样。和s.age打印20

然后转到下一个元素并重复相同的过程。