# 類名推薦用駝峰命名
# 類體**在定義時就會執行,在例項化時只自動執行__init__
# 類中存放的是物件共有的資料和功能,訪問位址都一樣
class
student()
:# 記錄有多少例項化物件
count =
0# __init__內存放是為物件初始化屬性的功能,但是可以存放任意**
# 想要在類呼叫時就立刻執行的**。
def__init__
(self,stu_name,stu_age,stu_gender,stu_school=
'abcschool'):
self.stu_school = stu_school
self.stu_name = stu_name
self.stu_age=stu_age
self.stu_gender = stu_gender
student.count +=
1# 隱藏屬性:偽裝成 _類名__屬性名 ,只在類定義時有用
self.__process
裝飾器是在不修改被裝飾物件源**以及呼叫方式的前提下為被裝飾物件新增新的功能的可呼叫物件
可以將類中的函式「偽裝成」物件的資料屬性,物件在訪問該特殊屬性時會觸發功能的執行,然後將返回值作為本次訪問的結果
class
people
:def
__init__
(self,name,weight,height)
: self.name=name
self.weight=weight
self.height=height
@property
defbmi
(self)
:return self.weight /
(self.height**2)
obj1 = people(
'cc',80
,1.7
)print
(obj1.bmi)
# 27.68166089965398
property還提供設定和刪除屬性的功能
class
foo:
def__init__
(self,val)
: self.__name=val
@property
defname
(self)
:# obj.name
return self.__name
@name.setter
defname
(self,value)
:# obj.setter='cc'
ifnot
isinstance
(value,
str)
:raise typeerror(f' must be str'
) self.__name=value
@name.delet
defname
(self)
:# def obj.name
raise permissionerror(
'can not delete'
)f=foo(
'll'
)f.name # ll
f.name=
'll'
#觸發name.setter裝飾器對應的函式name(f,』cc')
f.name=
123#觸發name.setter對應的的函式name(f,123),丟擲異常typeerror
del f.name #觸發name.deleter對應的函式name(f),丟擲異常permissionerror
python支援多繼承:可以繼承多個父類
class
parentclass1
:#定義父類
pass
class
parentclass2
:#定義父類
pass
class
subclass1
(parentclass1)
:#單繼承
pass
class
subclass2
(parentclass1,parentclass2)
:#多繼承
pass
subclass2.__bases_ # 檢視繼承的父類
# ,
class
people
: school =
'whu'
def__init__
(self,name,age,***)
: self.name = name
self.age = age
self.*** = ***
class
student
(people)
:# 擴充套件學生的學號功能
def__init__
(self,name,age,***,id)
: people.__init__(self,name,age,***)
self.id=
iddef
choose_course
(self)
:print
(f'正在選課'
)# 擴充套件父類功能
class
teacher
(people)
:# 指名道姓的跟父類要__init__方法
def__init__
(self,name,age,***,salary,level)
: people.__init__(self,name,age,***)
self.salary = salary
self.level = level
defscore
(self)
:print
(f'正在打分'
)teacher = teacher(
'cc',18
,'woman'
,1500,2
)
這種繼承結構下導致的問題稱之為菱形問題:如果a中有乙個方法,b和/或c都重寫了該方法,而d沒有重寫它,那麼d繼承的是哪個版本的方法:b的還是c的?如下所示
並且,對於你定義的每乙個類,python都會計算出乙個方法解析順序(mro)列表,該mro列表就是乙個簡單的所有基類的線性順序列表
classa(
object):
deftest
(self)
:print
('from a'
)class
b(a)
:def
test
(self)
:print
('from b'
)class
c(a)
:def
test
(self)
:print
('from c'
)class
d(b,c)
:pass
obj = d(
)obj.test(
)# 結果為:from b
# 多繼承屬性查詢順序
print
(d.mro())
# [, , , , ]
在非菱形繼承的情況下:深度優先遍歷
在菱形繼承的情況下:最後找所有類的父類
《Python全棧開發 Python 類與物件》
1.python 是一門物件導向語言,採用語法 class 去建立乙個類 1.資料屬性 2.函式屬性 class chinese 這是乙個中國人的類 類分兩部分 資料屬性部分,方法 函式 部分 這裡是類的資料屬性,每個物件共有的部分 dang 共產黨 init 這個函式很特殊,當類建立乙個物件例項的...
python全棧要學什麼 python全棧學習路線
i程式設計客棧t行業,技術要比學歷 年齡 從業經驗更為重要,技術水平直接決定就業薪資,想要學好python,首先要先了解精通python語言基礎 python web開發 python爬蟲 python資料分析這四大方面。全棧即指的是全棧工程師,指掌握多種技能,並能利用多種技能獨立完成產品的人。就是...
python全棧開發 day22 物件導向
1 面向過程程式設計 核心是 過程 二字,過程指的是解決問題的步驟,即先幹什麼再幹什麼 基於該思想編寫程式就好比在編寫一條流水線,是一種機械式的思維方式 優點 複雜的問題流程化 進而簡單化 缺點 可擴充套件性差 2 物件導向 核心 物件 二字,物件指的是特徵與技能的結合體,基於該思想編寫程式就好比在...