一、類和對象
- 類的意思:種類、分類、類別
對象是特征與技能的結合體,我可能有身高體重、而你也有身高體重,所以你會說你像我,但是你一定不會說你像阿貓阿狗。並且我和你其實就可以說成是一類,而你和選課系統不能說是一類,因此給出類的定義:類就是一系列對象相似的特征與技能的結合體。
在現實世界中:先有一個個具體存在的對象,然后隨着人類文明的發展才了分類的概念,既然現實世界中有類這個概念,Python程序中也一定有類這個概念,但是在Python程序中:必須先定義類,然后調用類來產生對象。
二、現實世界中定義類和對象
2.1 定義對象
就拿未來我們的選課系統來講,我們先總結一套現實世界中的學生對象:
-
對象1:
- 特征:
- 學校='oldboy'
- 姓名='耗哥'
- 年齡=18
- 性別='male'
- 技能:
- 選課
- 特征:
-
對象2:
- 特征:
- 學校='oldboy'
- 姓名='豬哥'
- 年齡=17
- 性別='male'
- 技能:
- 選課
- 特征:
-
對象3:
- 特征:
- 學校='oldboy'
- 姓名='帥翔'
- 年齡=19
- 性別='female'
- 技能:
- 選課
- 特征:
2.2 定義對象
站在未來選課系統的角度,我們還可以總結現實世界中的學生類:
- 老男孩學生類:
- 相似的特征:
- 學校='oldboy'
- 相似的技能
- 選課
- 相似的特征:
三、程序中定義類和對象
3.1 定義類
# 注意類中定義變量使用駝峰體
class OldboyStudent():
school = 'oldboy'
def choose_course(self):
print('is choosing course')
- 曾經定義函數,函數只檢測語法,不執行代碼,但是定義類的時候,類體代碼會在類定義階段就立刻執行,並且會產生一個類的名稱空間,也就是說類的本身其實就是一個容器/名稱空間,是用來存放名字的,這是類的用途之一
print(OldboyStudent.__dict__)
{'__module__': '__main__', 'school': 'oldboy', 'choose_course': <function OldboyStudent.choose_course at 0x10d653ae8>, '__dict__': <attribute '__dict__' of 'OldboyStudent' objects>, '__weakref__': <attribute '__weakref__' of 'OldboyStudent' objects>, '__doc__': None}
print(OldboyStudent.__dict__['school'])
oldboy
print(OldboyStudent.__dict__['choose_course'])
<function OldboyStudent.choose_course at 0x10d653ae8>
try:
OldboyStudent.__dict__['choose_course']()
except Exception as e:
print('error:', e)
error: choose_course() missing 1 required positional argument: 'self'
print(OldboyStudent.school)
oldboy
OldboyStudent.choose_course(111)
is choosing course
print(OldboyStudent.choose_course)
<function OldboyStudent.choose_course at 0x10d653ae8>
OldboyStudent.__dict__['choose_course']
<function __main__.OldboyStudent.choose_course(self)>
OldboyStudent.country='China'
OldboyStudent.__dict__['country']
'China'
OldboyStudent.country='CHINA'
OldboyStudent.__dict__['country']
'CHINA'
del OldboyStudent.school
print(OldboyStudent.__dict__)
{'__module__': '__main__', 'school': 'oldboy', 'choose_course': <function OldboyStudent.choose_course at 0x10d653ae8>, '__dict__': <attribute '__dict__' of 'OldboyStudent' objects>, '__weakref__': <attribute '__weakref__' of 'OldboyStudent' objects>, '__doc__': None, 'country': 'CHINA'}
3.2 定義對象
- 調用類即可產生對象,調用類的過程,又稱為類的實例化,實例化的結果稱為類的對象/實例
stu1=OldboyStudent() # 調用類會得到一個返回值,該返回值就是類的一個具體存在的對象/實例
print(stu1.school)
oldboy
stu2=OldboyStudent() # 調用類會得到一個返回值,該返回值就是類的一個具體存在的對象/實例
print(stu2.school)
oldboy
stu3=OldboyStudent() # 調用類會得到一個返回值,該返回值就是類的一個具體存在的對象/實例
stu3.choose_course()
is choosing course