-------------------類屬性和例項屬性關係-------------------
1、類屬性和例項屬性關係
1、例項屬性
例項物件獨有的屬性
2、類屬性
類名訪問類屬性
3、例項中無同名屬性時,可訪問到類屬性,當定義同名例項屬性時,則無法訪問
4、常用的查詢指令
1、vars :檢視例項內屬性
2、dir :顯示類屬性和所有例項屬性
3、type :顯示型別
-------------------方法-------------------
1、例項方法
隱含的引數為類例項self
2、類方法
隱含的引數為類本身cls
3、靜態方法
為隱含引數,主要為了類例項也可以直接呼叫靜態方法
4、類名可以呼叫類方法和靜態方法,但不可以呼叫例項方法
5、例項:
class test(object):
def instancefun(self):
print("instancefun")
print(self)
@classmethod
def classfun(cls):
print("classfun")
print(cls)
@staticmethod
def staticfun():
print("staticfun")
-------------------私有化-------------------
1、xx :公有變數
2、_x :單前置下劃線,私有化屬性或方法,from somemodule import *禁止匯入,類物件和子類可以訪問
3、__xx :雙前置下劃線,避免與子類中的屬性命名衝突,無法在外部直接訪問(名字重整所以訪問不到)
4、__xx__ :雙前後下劃線,使用者名字空間的魔法物件或屬性。例如:init , __ 不要自己發明這樣的名字
6、示例:
#人類class person(object):
def __init__(self,name,age,state):
self.name = name
self._age = age
self.__state = state
def personshow(self):
print self.name
print self._age
print self.__state
def _work(self):
print('in work')
def __away(self):
print('in away')
#學生類繼承人
class student(person):
def setinfo(self,name,age,state):
self.name = name
self._age = age
self.__state = state
def studentshow(self):
print self.name
print self._age
print self.__state
#main入口
if __name__ == '__main__':
#建立乙個人類的物件
person = person('xiaohao', 18, 'football')
person.personshow()
#建立乙個學生物件
student = student('xiaohao', 18, 'football')
student.setinfo('xiaowang',25,'basketball')
student.studentshow()
student.personshow()
person._work()
person._person__away()
-------------------分析乙個類-------------------
1、__init__
1、說明 :構造初始化函式
2、觸發條件 :建立例項後,賦值時使用,在new後
2、__new__
1、說明 :生成例項所需屬性
2、觸發條件 :建立例項時
3、__class__
1、說明 :例項所在的類
2、觸發條件 :例項__class__
4、__str__
1、說明 :例項字串表示,可讀性
2、觸發條件 :print(類例項),如沒實現,使用repr結果
5、__repr__
1、說明 :例項字串表示,準確性
2、觸發條件 :類例項 回車 或者 print(repr(類例項))
6、__del__
1、說明 :析構
2、觸發條件 :del刪除例項
7、__dict__
1、說明 :例項自定義屬性
2、觸發條件 :vars(例項 dict)
8、__doc__
1、說明 :類文件,子類不繼承
2、觸發條件 :help(類或例項)
9、__getattribute__
1、說明 :屬性訪問***
2、觸發條件 :訪問例項屬性時,優先順序高於__dict__訪問
3、例項 :
#coding=utf-8
class itcast(object):
def __init__(self,subject1):
self.subject1 = subject1
self.subject2 = 'cpp'
#屬性訪問時***,打log
def __getattribute__(self,obj):
if obj == 'subject1':
print('log subject1')
return 'redirect python'
else: #測試時注釋掉這2行,將找不到subject2
return object.__getattribute__(self,obj)
def show(self):
print 'this is itcast'
s = itcast('python')
print s.subject1
print s.subject2
10、__bases__
1、說明 :類的所有父類構成元素
2、觸發條件 :
-------------------屬性保護-------------------
1、例項:
#coding=utf-8
class man(object):
def __init__(self, name, age):
self._name = name
self._age = age
@property
def name(self):
return self._name
@property
def age(self):
return self._age
@age.setter
def age(self, age):
if not isinstance(age, int):
raise valueerror('age should be int')
if age < 0 or age > 150:
raise valueerror('age should be 0-150')
self._age = age
m = man('jack', 32)
print(m.name)
print(m.age)
m.age = 40
print(m.age)
m.name = 'rose' #此處報錯
-------------------物件導向設計-------------------
1、封裝:
2、繼承:class cat(animle) class animle(object)
1、重寫
class cat(animle):
def chi(self):
重寫animal.chi(self)
3、多型:
1、虛方法
2、抽象方法
3、介面
4、示例:
class dog(animal):
def chi(self):
print 'chi'
def test(animal):
animal.chi()
dog = dog()
test(dog)
python 物件導向高階程式設計
python 裝飾器 property使用 classscreen property defwidth self returnself.width pass width.setter defwidth self,value self.width value property defheight se...
python 物件導向(高階篇)
文章摘自 類的成員可以分為三大類 字段 方法和屬性 方法 普通方法,靜態方法,類方法。屬性 普通屬性 字段包括 普通欄位和靜態字段,他們在定義和使用中有所區別,而最本質的區別是記憶體中儲存的位置不同,class student school python學院 def init self,name,a...
python物件導向高階程式設計
1.繫結方法 給所有例項都繫結方法,可以給class繫結方法 def set score self,score self.score score student.set score set score 給class繫結方法後,所有例項均可呼叫。但是,如果我們想要限制例項的屬性怎麼辦?比如,只允許對s...