class SchoolMember:
'''Represents any school member.'''
def __init__(self, name, age):
self.name = name
self.age = age
print '(Initialized SchoolMember: %s)' % self.name
def tell(self):
'''Tell my details.'''
print 'Name:"%s" Age:"%s"' % (self.name, self.age),
class Teacher(SchoolMember):
'''Represents a teacher.'''
def __init__(self, name, age, salary):
SchoolMember.__init__(self, name, age)
self.salary = salary
print '(Initialized Teacher: %s)' % self.name
def tell(self):
SchoolMember.tell(self)
print 'Salary: "%d"' % self.salary
class Student(SchoolMember):
'''Represents a student.'''
def __init__(self, name, age, marks):
SchoolMember.__init__(self, name, age)
self.marks = marks
print '(Initialized Student: %s)' % self.name
def tell(self):
SchoolMember.tell(self)
print 'Marks: "%d"' % self.marks
t = Teacher('Mrs. Shrividya', 40, 30000)
s = Student('Swaroop', 22, 75)
print # prints a blank line
members = [t, s]
for member in members:
member.tell() # works for both Teachers and Students
爲了使用繼承,我們把基本類的名稱作爲一個元組跟在定義類時的類名稱之後。然後,我們注意到基本類的__init__
方法專門使用self
變量調用,這樣我們就可以初始化對象的基本類部分。這一點十分重要——Python不會自動調用基本類的constructor,你得親自專門調用它。
我們還觀察到我們在方法調用之前加上類名稱前綴,然後把self
變量及其他參數傳遞給它。
注意,在我們使用SchoolMember
類的tell
方法的時候,我們把Teacher
和Student
的實例僅僅作爲SchoolMember
的實例。
另外,在這個例子中,我們調用了子類型的tell
方法,而不是SchoolMember
類的tell
方法。可以這樣來理解,Python總是首先查找對應類型的方法,在這個例子中就是如此。如果它不能在導出類中找到對應的方法,它纔開始到基本類中逐個查找。基本類是在類定義的時候,在元組之中指明的。
一個術語的註釋——如果在繼承元組中列了一個以上的類,那麼它就被稱作 多重繼承 。