Python的物件導向性質
類和對象是物件導向編程的兩個主要方面。類建立一個新類型,而對象這個類的 執行個體 。這類似於你有一個int
類型的變數,這儲存整數的變數是int
類的執行個體(對象)。
需要注意的是,在Python中,即便是整數也被作為對象(屬於int
類)。這和C++、Java(1.5版之前)把整數純粹作為類型是不同的。通過help(int)
瞭解更多這個類的詳情。
對象可以使用普通的屬於對象的變數儲存資料。屬於一個對象或類的變數被稱為域。對象也可以使用屬於類的函數來具有功能。這樣的函數被稱為類的方法。這些術語協助我們把它們與孤立的函數和變數區分開來。域和方法可以合稱為類的屬性。
一.Python的__init__方法
例如:
#!/usr/bin/python<br /># Filename: class_init.py</p><p>class Person:<br /> def __init__(self, name):<br /> self.name = name<br /> def sayHi(self):<br /> print 'Hello, my name is', self.name</p><p>p = Person('Swaroop')<br />p.sayHi()</p><p># This short example can also be written as Person('Swaroop').sayHi() </p><p>
輸出為:
$ python class_init.py<br />Hello, my name is Swaroop </p><p>
在一定程度上,可以認定為Python中的建構函式。
如同__init__
方法一樣,還有一個特殊的方法__del__
,類似於解構函式.
注意:Python中所有的類成員(包括資料成員)都是公用的,所有的方法都是有效。
只有一個例外:如果你使用的資料成員名稱以 雙底線首碼 比如__privatevar
,Python的名稱管理體系會有效地把它作為私人變數。
這樣就有一個慣例,如果某個變數只想在類或對象中使用,就應該以單底線首碼。而其他的名稱都將作為公用的,可以被其他類/對象使用。記住這隻是一個慣例,並不是Python所要求的(與雙底線首碼不同)。
二.類的繼承
#!/usr/bin/python<br /># Filename: inherit.py</p><p>class SchoolMember:<br /> '''Represents any school member.'''<br /> def __init__(self, name, age):<br /> self.name = name<br /> self.age = age<br /> print '(Initialized SchoolMember: %s)' % self.name</p><p> def tell(self):<br /> '''Tell my details.'''<br /> print 'Name:"%s" Age:"%s"' % (self.name, self.age),</p><p>class Teacher(SchoolMember):<br /> '''Represents a teacher.'''<br /> def __init__(self, name, age, salary):<br /> SchoolMember.__init__(self, name, age)<br /> self.salary = salary<br /> print '(Initialized Teacher: %s)' % self.name</p><p> def tell(self):<br /> SchoolMember.tell(self)<br /> print 'Salary: "%d"' % self.salary</p><p>class Student(SchoolMember):<br /> '''Represents a student.'''<br /> def __init__(self, name, age, marks):<br /> SchoolMember.__init__(self, name, age)<br /> self.marks = marks<br /> print '(Initialized Student: %s)' % self.name</p><p> def tell(self):<br /> SchoolMember.tell(self)<br /> print 'Marks: "%d"' % self.marks</p><p>t = Teacher('Mrs. Shrividya', 40, 30000)<br />s = Student('Swaroop', 22, 75)</p><p>print # prints a blank line</p><p>members = [t, s]<br />for member in members:<br /> member.tell() # works for both Teachers and Students </p><p>
輸出為:
$ python inherit.py<br />(Initialized SchoolMember: Mrs. Shrividya)<br />(Initialized Teacher: Mrs. Shrividya)<br />(Initialized SchoolMember: Swaroop)<br />(Initialized Student: Swaroop)</p><p>Name:"Mrs. Shrividya" Age:"40" Salary: "30000"<br />Name:"Swaroop" Age:"22" Marks: "75" </p><p>