Python面向對象編程——類與對象

Python面向對象編程——類與對象

1、類與對象的概念

類即類別、種類,是面向對象設計最重要的概念,從一小節咱們得知對象是特徵與技能的結合體,而類則是一系列對象類似的特徵與技能的結合體。python

那麼問題來了,先有的一個個具體存在的對象(好比一個具體存在的人),仍是先有的人類這個概念,這個問題須要分兩種狀況去看。編程

  • 在現實世界中:確定是先有對象,再有類。
世界上確定是先出現各類各樣的實際存在的物體,而後隨着人類文明的發展,人類站在不一樣的角度總結出了不一樣的種類,好比
人類、動物類、植物類等概念。也就說,對象是具體的存在,而類僅僅只是一個概念,並不真實存在,好比你沒法告訴我人類
具體指的是哪個人。
  • 在程序中:務必保證先定義類,後產生對象。
這與函數的使用是相似的:先定義函數,後調用函數,類也是同樣的:在程序中須要先定義類,後調用類。不同的是:調用
函數會執行函數體代碼返回的是函數體執行的結果,而調用類會產生對象,返回的是對象。

2、定義類

按照上述步驟,咱們來定義一個類(咱們站在老男孩學校的角度去看,在座的各位都是學生)函數

  • 在現實世界中,先有對象,再有類
對象1:李坦克
    特徵:
        學校=oldboy
        姓名=李坦克
        性別=男
        年齡=18
    技能:
        學習
        吃飯
        睡覺

對象2:王大炮
    特徵:
        學校=oldboy
        姓名=王大炮
        性別=女
        年齡=38
    技能:
        學習
        吃飯
        睡覺

對象3:牛榴彈
    特徵:
        學校=oldboy
        姓名=牛榴彈
        性別=男
        年齡=78
    技能:
        學習
        吃飯
        睡覺


現實中的老男孩學生類
    類似的特徵:
        學校=oldboy
    類似的技能:
        學習
        吃飯
        睡覺
  • 在程序中,務必保證:先定義(類),後使用類(用來產生對象)

注意:學習

  • 類中能夠有任意python代碼,這些代碼在類定義階段便會執行,於是會產生新的名稱空間,用來存放類的變量名與函數名,能夠經過OldboyStudent.__dict__查看.
  • 類中定義的名字,都是類的屬性,點是訪問屬性的語法。
  • 對於經典類來講咱們能夠經過該字典操做類名稱空間的名字,但新式類有限制(新式類與經典類的區別咱們將在後續章節介紹)。

3、類的使用

  • 引用類的屬性
OldboyStudent.school #查
OldboyStudent.school='Oldboy' #改
OldboyStudent.x=1 #增
del OldboyStudent.x #刪
  • 調用類,或稱爲實例化,獲得程序中的對象
s1=OldboyStudent()
s2=OldboyStudent()
s3=OldboyStudent()

#如此,s一、s二、s3都同樣了,而這三者除了類似的屬性以外還各類不一樣的屬性,這就用到了__init__
  • __init__方法
#注意:該方法是在對象產生以後纔會執行,只用來爲對象進行初始化操做,能夠有任意代碼,但必定不能有返回值
class OldboyStudent:
    ......
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex
    ......

s1=OldboyStudent('李坦克','男',18) #先調用類產生空對象s1,而後調用OldboyStudent.__init__(s1,'李坦克','男',18)
s2=OldboyStudent('王大炮','女',38)
s3=OldboyStudent('牛榴彈','男',78)

4、對象的使用

#執行__init__,s1.name='牛榴彈',很明顯也會產生對象的名稱空間能夠用s2.__dict__查看,查看結果爲
{'name': '王大炮', 'age': '女', 'sex': 38}

s2.name #查,等同於s2.__dict__['name']
s2.name='王三炮' #改,等同於s2.__dict__['name']='王三炮'
s2.course='python' #增,等同於s2.__dict__['course']='python'
del s2.course #刪,等同於s2.__dict__.pop('course')

5、補充說明

  • 站的角度不一樣,定義出的類是大相徑庭的;
  • 現實中的類並不徹底等於程序中的類,好比現實中的公司類,在程序中有時須要拆分紅部門類,業務類等;
  • 有時爲了編程需求,程序中也可能會定義現實中不存在的類,好比策略類,現實中並不存在,可是在程序中倒是一個很常見的類。
相關文章
相關標籤/搜索