python學習筆記(五)之類

2021-10-05 13:32:50 字數 4788 閱讀 9712

(二) 類的定義

(三) 類的使用

(四) 屬性引用

(五) 訪問限制

物件導向程式設計是一種程式設計方式,此程式設計方式的落地需要使用 「類」 和 「物件」 來實現,所以,物件導向程式設計其實就是對 「類」 和 「物件」 的使用。

用來描述具有相同的屬性和方法的物件的集合。它定義該集合中每個物件所共有的屬性和方法。類就是乙個模板,模板裡可以包含多個函式,函式裡實現一些功能。

通過類定義的資料結構例項。物件包括兩個資料成員(類變數和例項變數)和方法。物件是根據模板建立的例項,通過例項物件可以執行類中的函式。

類方法:類中定義的函式。無須特定的物件例項就能夠工作的從屬於類的函式。

方法重寫:如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆蓋(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,其他空值 需要多次判斷使...