本章主要介紹內容為建立自己的物件:
7.2 建立自己的類
首先看使用乙個簡單的類
_metaclass_=type
>>> class person:
def setname(self,name):
self.name=name
def getname(self):
return self.name
def greet(self):
print ("hello %s " %self.name)
self引數相當於對物件自身的引用,可以參考c++中的this 指標
>>> daxiao=person()
>>> daxiao.setname("daxiao")
>>> daxiao.getname()
'daxiao'
>>> daxiao.greet()
hello daxiao
7.2.3私有化
預設情況下,程式可以從外部訪問乙個物件的特性。就如上面的例子那樣。
python並不支援直接私有的方式,但是可以利用一些小技巧達到私有特性的效果
class secretive:
def __inaccessible(self):
print("belt you can't see me")
def accessible(self):
self.__inaccessible()
>>> a=secretive()
>>> a.__inaccessible()
traceback (most recent call last):
file "", line 1, in a.__inaccessible()
attributeerror: 'secretive' object has no attribute '__inaccessible'
>>> a.accessible()
belt you can't see me
沒錯,就是在函式名前加雙下劃線。這樣函式只能被類的內部呼叫。
其實,在類的內部呼叫中,所有加雙下劃線開始的名字都被翻譯成前面加上單下劃線和類名的形式。如果想訪問「私有」函式,只需
a._secretive__inaccessible()
belt you can't see me
簡而言之,確保其他人不會訪問物件的方法和特性是不可能的。
7.2.5 指定超類
子類可以擴充套件超類的定義,將其他類名寫在class語句後的圓括號內可以指定超類
class father:
def a(self):
print("i am man")
def b(self):
print("i am older")
class son(father):
def b(self):
print("i am younger")
b=son()
>>> a.a()
i am man
>>> a.b()
i am older
>>> b.a()
i am man
>>> b.b()
i am younger
當然 也可以繼承多個超類
class father:
def a(self):
print("i am man")
def b(self):
print("i am older")
class mother:
def c(self):
print("i am human")
class son(father,mother):
def b(self):
print("i am younger")
>>> b=son()
>>> b.a()
i am man
>>> b.b()
i am younger
>>> b.c()
i am human
注意,先繼承的超類中的方法會重寫後繼承的超類中的方法
7.2.8 介面和內省
在面對多型物件時,可能需要判斷其究竟具有哪些方法。比如上例中的b物件,包含a,b,c三個方法
>>> hasattr(b,'a')
true
>>> hasattr(b,'d')
false
小結
物件
類
多型
封裝
繼承
介面和內省
python學習(七) 更加抽象
python是物件導向的語言。7.1 物件的魔力 7.1.1 多型 不管是字串還是列表,count 函式都可以正常工作。ab b c count c 1 abc count c 1下面的加號 運算子對於整數和列表都可以起作用,而且行為不同 1 2 3 fsafda fsdfs fsafdafsdfs...
python學習筆記 7 更加抽象
usr bin env python coding utf 8 指定原始碼檔案編碼,python預設為ascii metaclass type 確定使用新式類 class person def setname self,name self 為是當前例項的引用 self.name name def g...
python之更加抽象 2014 4 6
更加抽象 12 50pm 14 50 p112 1.物件的魔力 多型 如count 在多種資料型別中都可以實現計數的功能 封裝 對全域性作用域中其他區域隱藏多餘資訊的原則 繼承2.類和型別 建立類class person def setname self,name self.name name de...