類屬性= 類變數 = 靜態屬性
初始化:類變數名 = 初始值
訪問(在類定義的方法或者外部**中):類名.變數名
類屬性通過例項物件名來訪問,則屬於該例項的例項屬性
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採用了一種完全不同的方法來開發計算機應用程式。在這種方法中,程式不是圍繞著要解決的任務來設計,而是圍繞著要解決的問題中的物件來設計。建立物件模型,將問題域化為不同的物件去處理。...