python全棧 類 物件

2021-10-21 17:05:27 字數 3903 閱讀 3686

# 類名推薦用駝峰命名

# 類體**在定義時就會執行,在例項化時只自動執行__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 物件導向 核心 物件 二字,物件指的是特徵與技能的結合體,基於該思想編寫程式就好比在...