標籤:int 建立 ssm 簡單介紹 assm error 不同 一個 @class
python物件導向基礎什麼是物件導向編程?
物件導向編程是一種程式設計的範式,它把程式當做不同對象的相互調用,是對現實世界建立的一種物件模型。
物件導向編程的基本思想
也就是類和執行個體
- 類 :類是用於定義抽象的類型。比如人,是一類東西
- 執行個體:執行個體是根據類的定義被建立出來的。比如小紅同學,就是根據人的屬性建立出來的。
# 我們通過class關鍵字定義一個類class Person: pass# 通過類來建立一個執行個體,即類名加上一個類似於函數的調用來建立執行個體xiaohong = Person()
class Person: def __init__(self): self.name = name # 初始化執行個體的屬性,self代表的是當前執行個體p1 = Person('XiaoHong')
屬性訪問限制
我們可以給一個執行個體綁定很多屬性,我們可以通過在屬性名稱開頭加上雙底線(__),讓這些屬性不被外部存取。
看下面例子:
class Person: def __init__(self, name): self.name = name self._title = 'Mr' # 單底線 self.__job = 'Student' # 雙底線表示私人屬性# 建立一個Person執行個體p = Person('Tom')print(p.name)print(p._title)print(p.__job)=>TomMr---------------------------------------------------------------------------AttributeError Traceback (most recent call last)<ipython-input-1-0815b282cdc2> in <module>() 7 p = Person('Tom') 8 print(p.name)----> 9 print(p.__job)AttributeError: Person instance has no attribute '__job'
由此可見,雙底線開頭‘__job‘不能直接被外部存取。
但是問題來了,如果屬性以‘xxx‘形式定義,那它又可以被外部存取。
因為以‘xxx‘定義的屬性在python的類中被稱為特殊屬性,比如__init__/cmp/str/__int__等等這些都是類預先定義的特殊屬性。通常我們不會以這種形式定義屬性。
值得說明的是,以單底線開頭的,應該是不能被外部存取的,到底為什麼,我也不知道。
為類建立屬性
類是模板,而執行個體是根據類建立的對象。
執行個體屬性每一個執行個體各自擁有,相互獨立,而類屬性只有一份。
當類屬性和執行個體屬性名稱字衝突時,優先選擇執行個體屬性。
class Person: job = 'Student' def __init__(self, name): self.name = name# 建立一個Person執行個體p1 = Person('Tom')p2 = Person('Jak')print(Person.job) # 直接存取類的屬性# 因為python是動態語言,類實質也是個對象,所有類的屬性也是可以動態添加和修改的Person.job = 'Teacher'print(Person.job)# 執行個體屬性每一個執行個體各自擁有,相互獨立。print(p1.name)print(p2.name)=>StudentTeacherTomJak
因此,執行個體屬性每一個執行個體各自擁有,相互獨立,而類屬性只有一份。
定義執行個體方法
執行個體的私人屬性是由雙底線開頭的屬性,無法被外部存取,但內部是可以訪問的。
執行個體方法就是在類中定義的函數,它的第一個參數永遠是self,指向調用該方法的執行個體本身。
在執行個體方法內部,可以訪問所有執行個體屬性,如果外部需要訪問執行個體屬性,可以通過方法調用獲得。
class Person: def __init__(self, name): self.__name = name def get_name(self): return self.__namep1 = Person('Tom')print(p1.get_name())=>Tom
萬事萬物接對象,類和函數都是對象。
p1 = Person('Tom')print(p1)print(p1.get_name)print(p1.get_name())=><__main__.Person instance at 0x000000000BBAD448><bound method Person.get_name of <__main__.Person instance at 0x000000000BBAD448>>Tom
建立類的方法
和屬性類似,方法也分執行個體方法和類方法。
在類中定義的全部是執行個體方法,執行個體方法第一個參數self是執行個體本身。
在在類中定義類的方法,需要在方法上面使用@classmethod
class Person(object): count = 0 @classmethod def how_many(cls): # 統計該類的執行個體個數 return cls.count def __init__(self, name): self.name = name Person.count = Person.count + 1print Person.how_many()p1 = Person('Bob')print Person.how_many()=>01
結語
這隻是簡單介紹物件導向,如果要深入,多看書。
如果哪有不正確,歡迎指正。
python物件導向基礎