python 類繼承


 1 #!/usr/bin/python
 2 # Filename: inherit.py
 3 
 4 class SchoolMember:
 5     '''Represents any school member.'''
 6     def __init__(self, name, age):
 7         self.name = name
 8         self.age = age
 9         print'(Initialized SchoolMember: %s)'% self.name
10 
11     def tell(self):
12         '''Tell my details.'''
13         print'Name:"%s" Age:"%s"'% (self.name, self.age),
14 
15 class Teacher(SchoolMember):
16     '''Represents a teacher.'''
17     def__init__(self, name, age, salary):
18         SchoolMember.__init__(self, name, age)
19         self.salary = salary
20         print'(Initialized Teacher: %s)'% self.name
21 
22     def tell(self):
23         SchoolMember.tell(self)
24         print'Salary: "%d"'% self.salary
25 
26 class Student(SchoolMember):
27     '''Represents a student.'''
28     def __init__(self, name, age, marks):
29         SchoolMember.__init__(self, name, age)
30         self.marks = marks
31         print'(Initialized Student: %s)'% self.name
32 
33     def tell(self):
34         SchoolMember.tell(self)
35         print'Marks: "%d"'% self.marks
36 
37 t = Teacher('Mrs. Shrividya',40,30000)
38 s = Student('Swaroop',22,75)
39 members = [t, s]
40 for member in members:
41     member.tell()# works for both Teachers and Students
42 (源文件:code/inherit.py)
43 輸出
44 
45 $ python inherit.py
46 (Initialized SchoolMember: Mrs. Shrividya)
47 (Initialized Teacher: Mrs. Shrividya)
48 (Initialized SchoolMember: Swaroop)
49 (Initialized Student: Swaroop)
50 
51 Name:"Mrs. Shrividya" Age:"40" Salary: "30000"
52 Name:"Swaroop" Age:"22" Marks: "75"

它如何工作

為了使用繼承,我們把基本類的名稱作為一個元組跟在定義類時的類名稱之后。然后,我們注意到基本類的__init__方法專門使用self變量調用,這樣我們就可以初始化對象的基本類部分。這一點十分重要——Python不會自動調用基本類的constructor,你得親自專門調用它。

我們還觀察到我們在方法調用之前加上類名稱前綴,然后把self變量及其他參數傳遞給它。

注意,在我們使用SchoolMember類的tell方法的時候,我們把TeacherStudent的實例僅僅作為SchoolMember的實例。

另外,在這個例子中,我們調用了子類型的tell方法,而不是SchoolMember類的tell方法。可以這樣來理解,Python總是首先查找對應類型的方法,在這個例子中就是如此。如果它不能在導出類中找到對應的方法,它才開始到基本類中逐個查找。基本類是在類定義的時候,在元組之中指明的。

一個術語的注釋——如果在繼承元組中列了一個以上的類,那么它就被稱作多重繼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM