在class內部,可以有屬性和方法,而外部**可以通過直接呼叫例項變數的方法來運算元據,這樣,就隱藏了內部的複雜邏輯。如:
classstudent(object):
def__init__
(self, name, score):
self.name =name
self.score =score
defprint_score(self):
print('
%s: %s
' % (self.name, self.score))
從前面student類的定義來看,外部**還是可以自由地修改乙個例項的name
、score
屬性。如果要讓內部屬性不被外部訪問,可以把屬性的名稱前加上兩個下劃線__
,在python中,例項的變數名如果以__
開頭,就變成了乙個私有變數(private),只有內部可以訪問,外部不能訪問。如:
classstudent(object):
def__init__
(self, name, score):
self.
__name =name
self.
__score =score
defprint_score(self):
print('
%s: %s
' % (self.__name, self.__score))
這樣就無法從外部訪問例項變數.__name
和例項變數.__score
了,這樣就確保了外部**不能隨意修改物件內部的狀態,這樣通過訪問限制的保護,**更加健壯。
但是如果外部**需要獲取內部變數怎麼辦?需要修改socre怎辦?可以給student類增加以下這樣的方法:
classstudent(object):
...defget_name(self):
return self.__name
defget_score(self):
return self.__score
defset_score(self, score):
self.
__score = score
如果要判斷乙個物件的型別時,怎麼辦?
對於基本型別都可以用type()類判斷:
print(type(123))---------->'int
'>
print(type('
string'))
---------->'str
'>
對於class的繼承關係來說,使用type()
就很不方便。我們要判斷class的型別,可以使用isinstance()
函式。
object -> animal -> dog -> husky
那麼,isinstance()
就可以告訴我們,乙個物件是否是某種型別。
>>> a =animal()>>> d =dog()
>>> h = husky()
結果:
>>>isinstance(h, husky)true
>>>isinstance(h, dog)
true
>>>isinstance(h, animal)
true
>>> isinstance(d, dog) and
isinstance(d, animal)
true
>>>isinstance(d, husky)
false
python基礎物件導向 上(入門篇 九)
2.類3.類的定義 4.引數self 5.總結 自己定義乙個類 使用class關鍵字來定義 語法 class 類名 塊 class myclass pass m myclass m是通過myclass建立的物件 m是myclass的例項 m2 myclass m2也是通過myclass建立的物件 m...
JS基礎入門篇(三十六) 物件導向( 三 )
class es6 中 為 關鍵字用來宣告 乙個 類 1.只能通過new呼叫 2.不存在變數提公升 3.多個方法之間直接書寫,不需要,隔開 4.類的方法是直接定義在類的原型上的 5.定義在類中的方法不可列舉 6.object.keys 和 object.values 下面是詳細解釋 1.只能通過ne...
Python入門篇(一)
對了,入門篇都是python3.6的,其實只要有其它物件導向的經驗,看一遍就ok了,如果沒有基礎的朋友,可就得多寫幾遍嘍,理解物件的用法,未完待續 一 概念 類 用來描述具有 相同屬性和方法的物件的集合 二 命名方式 1 類名大駝峰 2 方法名小駝峰 3 嚴格區分大小寫 三 類的定義 class c...