1.例項化
2.__init__方法
3.類方法和靜態方法
4.訪問控制
5.屬性裝飾器
在python中,用變數表示特徵,用函式表示技能,因而具有相同特徵和技能的一類事物就是『類』,物件是則是這一類事物中具體的乙個.
三要素類(class): 用來描述具有相同的屬性和方法的物件的集合。它定義了該集合中每個物件所共有的屬性和方法。物件是類的例項
類例項化後,可以使用其屬性,實際上,建立乙個類之後,可以通過類名訪問其屬性
類物件支援兩種操作:屬性引用和例項化。
屬性引用使用和 python 中所有的屬性引用一樣的標準語法:obj.name
類物件建立後,類命名空間中所有的命名都是有效屬性名。
類中定義的函式。
a = myclass()
將物件建立為有初始狀態的。因此類可能會定義乙個名為__init__
的特殊方法(構造方法),像下面這樣:
def __init__(self):
self.data =
class complex:
def __init__(self, realpart, imagpart):
self.r = realpart
self.i = imagpart
x = complex(3.0, -4.5)
x.r, x.i
(3.0, -4.5)
class classmethod_demo():
role = 'dog'
@classmethod
def func(cls):
print(cls.role)
classmethod_demo.func()
class staticmethod_demo():
role = 'dog'
@staticmethod
def func():
print("當普通方法用")
staticmethod_demo.func()
使用雙下劃線開頭的屬性名
#其實這僅僅這是一種變形操作
#類中所有雙下劃線開頭的名稱如__x都會自動變形成:_類名__x的形式:
class a:
__n=0 #類的資料屬性就應該是共享的,但是語法上是可以把類的資料屬性設定成私有的如__n,會變形為_a__n
def __init__(self):
self.__x=10 #變形為self._a__x
def __foo(self): #變形為_a__foo
print('from a')
def bar(self):
self.__foo() #只有在類內部才可以通過__foo的形式訪問到.
#a._a__n是可以訪問到的,即這種操作並不是嚴格意義上的限制外部訪問,僅僅只是一種語法意義上的變形
使用雙下劃線開頭的方法名
#正常情況
>>> class a:
... def fa(self):
... print('from a')
... def test(self):
... self.fa()
...
>>> class b(a):
... def fa(self):
... print('from b')
...
>>> b=b()
>>> b.test()
from b
#把fa定義成私有的,即__fa
>>> class a:
... def __fa(self): #在定義時就變形為_a__fa
... print('from a')
... def test(self):
... self.__fa() #只會與自己所在的類為準,即呼叫_a__fa
...
>>> class b(a):
... def __fa(self):
... print('from b')
...
>>> b=b()
>>> b.test()
from a
將乙個類的函式定義成特性以後物件再去使用的時候obj.name根本無法察覺自己的name是執行了乙個函式然後計算出來的,這種特性的使用方式遵循了統一訪問的原則.乙個靜態屬性property本質就是實現了get,set,delete三種方法
class foo:
def __init__(self,val):
self.__name=val #將所有的資料屬性都隱藏起來
@property
def name(self):
return self.__name #obj.name訪問的是self.__name(這也是真實值的存放位置)
@name.setter
def name(self,value):
if not isinstance(value,str): #在設定值之前進行型別檢查
raise typeerror('%s must be str' %value)
self.__name=value #通過型別檢查後,將值value存放到真實的位置self.__name
@name.deleter
def name(self):
raise typeerror('can not delete')
f=foo('egon')
print(f.name)
# f.name=10 #丟擲異常'typeerror: 10 must be str'
del f.name #丟擲異常'typeerror: can not delete'
物件導向 初識物件導向
面向過程思想 步驟清晰簡單,第一步做什麼,第二步做什麼.面向過程適合處理一些較為簡單的問題 物件導向思想 物以類聚,分類的思維模式,思考問題首先會解決問題需要分哪些類,然後對這些類進行單獨思考,最後才是對某個分類下的細節進行面向過程的思索 物件導向適合處理複雜的問題,適合處理需要多人協作的問題 對於...
初識物件導向
開始接觸物件導向程式設計,學習時間不長,寫下點自己目前的理解,總結梳理下最近的學習成果。一切皆是物件,物件導向體系中有這麼一句經典的話。我認為可以這麼理解,物件導向程式設計的關鍵步驟是如何將我們所希望實現的功能抽象為計算機可實現的模型,這些模型我們可以稱之為物件。當我們把具有相同特點的多個物件進一步...
物件導向初識
一,物件導向 1.面向過程的程式設計的核心是過程 流水線式思維 過程即解決問題的步驟,面向 過程的設計就好比精心設計好一條流水線,考慮周全什麼時候處理什麼東西。優點是 極大的降低了寫程式的複雜度,只需要順著要執行的步驟,堆疊 即可。缺點是 一套流水線或者流程就是用來解決乙個問題,牽一髮而動全身。2....