001 物件導向概述(一) 屬性

2021-10-22 21:13:42 字數 4342 閱讀 4750

類屬性= 類變數 = 靜態屬性

初始化:類變數名 = 初始值

訪問(在類定義的方法或者外部**中):類名.變數名

類屬性通過例項物件名來訪問,則屬於該例項的例項屬性

class

person

: count =

0 job =

"雇主"

# 類屬性

defmain()

:print

(person.job)

# 通過類名訪問

p1 = person(

) p2 = person(

)print

(p1.job)

# 通過例項物件名訪問

print

(p2.job)

p1.job =

"雇員"

print

(p1.job)

# 通過例項物件名訪問,job就是例項物件的例項屬性,相當於給自己存了乙個副本

print

(p2.job)

if __name__ ==

"__main__"

: main(

)

class

person

: __name =

'馬保國'

name =

'盧本偉'

defget_name()

:# print(__name) # 錯誤,必須通過類名

print

(person.__name)

# print(name) # 錯誤,必須通過類名

print

(person.name)

defmain()

: person.get_name(

)# person.__name # 錯誤,私有屬性不能在類外訪問

print

(person.name)

# 正確,公有類變數可以通過類名在類外訪問

if __name__ ==

"__main__"

: main(

)res:

馬保國盧本偉

盧本偉

封裝性:要求不直接訪問類中的資料成員實現方法:

定義私有屬性

定義訪問私有屬性的函式

使用@property裝飾器裝飾這些函式

裝飾之後的函式就可以被「當作」屬性來訪問

class

person

:def

__init__

(self, name)

:# 注意引數是self

self.__name = name

@property

defname

(self)

:# 注意引數是self

return self.__name

defmain()

: p = person(

'盧本偉'

)print

(p.name)

if __name__ ==

"__main__"

: main(

)

@property裝飾器預設提供乙個唯讀屬性

class

person

:def

__init__

(self, name)

:# 注意引數是self

self.__name = name

@property

defname

(self)

:# 注意引數是self

return self.__name

@name.setter # 注意這裡裝飾器的書寫方式(set訪問器)

defname

(self, value)

: self.__name = value

@name.deleter # (get訪問器)

defname

(self)

:del self.__name

defmain()

: p = person(

'盧本偉'

)# 使用建構函式初始化

p.name =

'馬保國'

# 使用setter函式,注意修改的方式

print

(p.name)

if __name__ ==

"__main__"

: main(

)res:

馬保國

property(fget = none, fset= none, fdel = none, doc = none)

fget:get訪問器

fset:set訪問器

fdel:del訪問器

另外一種書寫方式

class

person

:def

__init__

(self, name)

:# 注意引數是self

self.__name = name

defgetname

(self)

:return self.__name

defsetname

(self, value)

: self.__name = value

defdelname

(self)

:del self.__name

name =

property

(getname, setname, delname,

"i'm the 'name' property."

)# 類似於顯示呼叫

defmain()

: p = person(

'盧本偉'

)# 使用建構函式初始化

print

(p.name)

p.name =

'馬保國'

# 使用setter函式

自定義的屬性:類定義中不存在的屬性

class

person

:pass

defmain()

: o = person(

) o.name =

'盧本偉'

# 自定義屬性

print

(o.name)

print

(o.__dict__)

# 物件通過特殊屬性__dict__儲存自定義屬性

if __name__ ==

"__main__"

: main(

)

class

person

(object):

def__init__

(self)

:pass

def__getattribute__

(self, name)

:# 該方法可攔截所有的獲取操作,除了它自己的

return

str.upper(

object

.__getattribute__(self, name)

)def

__setattr__

(self, name, value)

:# 過載,自定義屬性的行為

object

.__setattr__(self, name,

str.strip(value)

)def

main()

: o = person(

) o.name =

' mary'

print

(o.name)

if __name__ ==

"__main__"

: main(

)

__getattr__(self, name) # 比__getattribute__優先呼叫

__getattribute__(self, name)

__setattr__(self, name, value)

__delattr__(self, name)

001物件導向

新增大概內容 1.抽取物件共有的屬性和行為,封裝成乙個模板 類 2.對類進行例項化,得到類所對應的具體物件 3.物件導向即不斷的基於類建立物件,指揮物件做事情 指具體的事物,由屬性和方法組成 特徵 屬性,行為 方法 使用class關鍵字進行宣告,是一種泛指,對類進行例項化即可得到物件 建立類名為st...

物件導向概述

物件導向概述 1 物件導向思想 a 什麼是物件導向 3點 1 面向過程是以函式為基礎,完成各種操作,強調的是過程 2 物件導向以物件為基礎,完成各種操作,強調的是物件,結果 3 物件導向是基於面向過程的 b 物件導向的思想特點 1 是一種更符合人們思考習慣的思想 2 把複雜的事情簡單化 3 把我們從...

物件導向概述

20世紀70年代以後,物件導向程式設計 object oriented programming,簡稱oop 開始流行。oop採用了一種完全不同的方法來開發計算機應用程式。在這種方法中,程式不是圍繞著要解決的任務來設計,而是圍繞著要解決的問題中的物件來設計。建立物件模型,將問題域化為不同的物件去處理。...