class SchoolMember:
"""代表任何一个学校的成员"""
def __init__(self,name,age):
self.name = name
self.age = age
def tell(self):
print("name:{0} age:{1}\n".format(self.name,self.age),end='')
class Teacher(SchoolMember):
"""老师类,继承自SchoolMember"""
def __init__(self,name,age,salary):
SchoolMember.__init__(self,name,age)
self.salary = salary
def tell(self):
SchoolMember.tell(self)#注意这里调用父类的方法要传self参数
print("teach salary:{0:d}".format(self.salary))
class Student(SchoolMember):
"""学生类,继承自SchoolMember"""
def __init__(self,name,age,grade):
SchoolMember.__init__(self,name,age)
self.grade = grade
def tell(self):
SchoolMember.tell(self) #注意这里调用父类的方法要传self参数
print("studet grade:{0}".format(self.grade))
t = Teacher("lin",33,3000)
s = Student("huang",23,90)
t.tell()
s.tell()
注意:
SchoolMember.tell(self) #注意这里调用父类的方法要传self参数
解释:
为了使用继承,我们把基本类的名称作为一个元组跟在定义类时的类名称之后。然后,我们注意到基本类的__init__ 方法专门使用self 变量调用,这样我们就可以初始化对象的基本类部分。这一点十分重要——Python 不会自动调用基本类的constructor,你得亲自显式调用它。我们还观察到我们在方法调用之前加上类名称前缀,然后把self 变量及其他参数传递给它。注意,在我们使用SchoolMember 类的tell 方法的时候,我们把Teacher 和Student的实例仅仅作为SchoolMember
的实例。另外,在这个例子中,我们调用了子类型的tell 方法,而不是SchoolMember 类的tell 方法。可以这样来理解,Python 总是首先查找对应类型的方法,在这个例子中就是如此。如果它不能在导出类中找到对应的方法,它才开始到基本类中逐个查找。基本类是在类定义的时候,在元组之中指明的。