(二) 類的定義
(三) 類的使用
(四) 屬性引用
(五) 訪問限制
物件導向程式設計是一種程式設計方式,此程式設計方式的落地需要使用 「類」 和 「物件」 來實現,所以,物件導向程式設計其實就是對 「類」 和 「物件」 的使用。
用來描述具有相同的屬性和方法的物件的集合。它定義該集合中每個物件所共有的屬性和方法。類就是乙個模板,模板裡可以包含多個函式,函式裡實現一些功能。
通過類定義的資料結構例項。物件包括兩個資料成員(類變數和例項變數)和方法。物件是根據模板建立的例項,通過例項物件可以執行類中的函式。
類方法:類中定義的函式。無須特定的物件例項就能夠工作的從屬於類的函式。
方法重寫:如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆蓋(override),也稱為方法的重寫。
資料成員:類變數或者例項變數用於處理類及其例項物件的相關的資料。
類變數(類屬性):類變數在整個例項化的物件中是公用的。類變數定義在類中且在函式體(方法)之外。類變數通常不作為例項變數使用,類變數也稱作屬性。
例項變數:定義在方法中的變數,只作用於當前例項的類。
類物件:僅支援兩個操作:
1:例項化:例項化操作建立該類的例項。
2:屬性引用:類名.屬性名 的方式引用屬性。
例項物件:類物件例項化的產物。
1.使用類來建立乙個真正的物件,這個物件就叫做這個類的乙個例項,也叫作例項物件(乙個類可以有無數個例項)。
2.僅支援屬性引用乙個操作:例項物件名.屬性名
屬性已存在時,繫結操作會將屬性名指向新的物件;
屬性名不存在時,則為該物件新增新的屬性,後面就可以引用新增屬性
1. 類屬性繫結:1、定義語法:
class
classname
(object):
...
2、類的組成:
# 例項屬性 必須通過初始化或者例項化物件,通過物件去訪問,
class
student
(object):
def__init__
(self, name)
: self.name = name
s = student(
'bob'
)print
(s.name )
# 類屬性 不需要例項化物件,直接通過類名訪問
class
student
(object):
name =
'student'
print
(student.name)
# 物件導向
# 屬性和方法
class
student
(object):
# 初始化方法 self指向建立的例項本身
def__init__
(self,name,score)
: self.name = name
self.score = score
defprint_score
(self)
:print
('%s: %s'
%(self.name,self.score)
)# 例項化物件1
xiaohong = student(
'xiaohong',98
)print(id
(xiaohong)
)# 例項化物件2
xiaobai = student(
'xiaobai',81
)print(id
(xiaobai)
)# 例項化物件3
xiaobai = student(
'xiaobai',81
)print(id
(xiaobai)
)
class
complex
:def
__init__
(self, realpart, imagpart)
: self.r = realpart
self.i = imagpart
x = complex(
3.0,
-4.5
)print
(x.r, x.i)
# 輸出結果:3.0 -4.5
第乙個引數必須為self,除第乙個引數外,類的方法和普通的函式無區別,如可以使用預設引數,可變引數,關鍵字引數和命名關鍵字引數等。
在類中呼叫乙個方法,在例項變數上直接呼叫即可,除了self不用傳遞,其他引數正常傳入。
1、標準語法:類物件.屬性名——obj.name
2、例項變數是每個例項都獨有的資料,而類變數是該類所有例項共享的屬性和方法。
class
dog:
dress =
"china"
##類屬性,每個例項所共享
def__init__
(self,name)
: self.name = name ##例項屬性,每個例項都是獨特的
3、類中呼叫例項屬性:self.屬性名
4、類外呼叫例項屬性:例項名.例項屬性名
注:類中存在__init__方法時,在例項化類時需要傳入引數(例項變數的實參),在呼叫類的方法時也需要傳入方法的實參(方法中存在形參時)
1.類屬性就是屬於類所有,可以直接用類名.屬性名直接呼叫,類的屬性在記憶體中只有乙份。例項屬性就是在__init__()方法中初始化的屬性;
2.例項屬性屬於類的物件所有,可以用物件名.屬性名的形式進行呼叫,但是不能用類名.屬性名進行呼叫 。因為例項屬性只有在例項建立時,才會初始化建立。
#1.類屬性和例項的屬性的呼叫關係
class
person
: country =
"china"
#類屬性
def__init__
(self,name,age)
: *** =
"男"#這不是例項屬性,只是變數而已,用物件名.***調不出來。
self.name = name #例項屬性
self.age = age
#建立物件
print
(person.country)
#print(person.age) 出錯,attributeerror: type object 'person' has no attribute 'age'
p1 = person(
"tom",12
)print
(p1.country,p1.age,p1.name)--
----
----結果如下---
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
-china
china 12 tom
類屬性只能通過類名.屬性才可以修改
如果使用 物件.類屬性 = 值 賦值語句,只會 給物件新增乙個屬性,而不會影響到 類屬性的值
1.最本質的區別是記憶體中儲存的位置不同,分別是類記憶體空間和例項記憶體空間
2.類屬性在記憶體中只儲存乙份,例項屬性在每個物件中都要儲存乙份
class
dog:
kind =
'canine'
deftell_kind()
:print
(dog.kind)
##涉及作用域
dog.tell_kind(
)# output: canine
1、總是先到例項物件中查詢屬性,再到類屬性中查詢屬性;
2、屬性繫結語句總是為例項物件建立新屬性,屬性存在時,更新屬性指向的物件。
class
dog:
tricks =
def__init__
(self, name)
: self.name = name
defadd_trick
(self, trick):
d = dog(
'fido'
)e = dog(
'buddy'
)d.add_trick(
'roll over'
)e.add_trick(
'play dead'
)print
(d.tricks) output:
# ['roll over', 'play dead']
Python學習筆記 之 類的匯入方法
在person.py檔案中定義personbase的父類和chinese的子類。personbase類中定義兩種方法,talk 和walk chinese子類中定義乙個屬於子類的language 子類 person.py class personbase def init self print pe...
PHP學習筆記之類
宣告類的關鍵字時class,宣告的格式如下 訪問許可權修飾符 class 類名其中,訪問許可權修飾符時可選的,常見的修飾符包括public private和protected。預設情況下為public。成員屬性必須使用關鍵字進行修飾,常見的關鍵字包括public private和protected等...
python學習筆記(五)
python裡的流程控制語句 if expression statements s else statements s identationerror 縮排錯誤,縮排4個空格 true 非空的值 string,tuple,list,set,dict false 0,null,其他空值 需要多次判斷使...