Python全棧開發實戰學習19

2021-09-12 20:02:07 字數 1733 閱讀 5753

一:繫結方法(繫結給誰,誰來呼叫就自動將自身作為第乙個引數傳入)

繫結到類的方法:用classmethod裝飾器的方法

為類量身定製

類.boud_method(),自動將類當做第乙個引數傳入

(其實物件也可以呼叫,當仍將類當做第乙個引數傳入)

2.繫結到物件的方法:沒有被任何裝飾裝飾的方法

為物件量身定做

物件.boud_method(),自動作為物件當作第乙個引數傳入

(屬於類的函式,類可以呼叫,但是必須按照函式的規則來,沒有自動傳值那麼一說)

二:非繫結方法:用staticmethod裝飾器裝飾的方法

不與類或物件繫結,類和物件都可以呼叫,但是沒有自動傳值那麼一說。就是個普通工具而已。

注意:與繫結到物件方法區分開,在類中直接定義的函式,沒有被任何裝飾器裝飾都是繫結到物件的方法,可不是普通函式,物件呼叫該方法會自動傳值,而staticmethod裝飾的方法,不管誰來呼叫,都沒有自動傳值一說。

當這個方法的操作只涉及靜態屬性的時候,就應該使用classmethod來裝飾這個方法 。把乙個方法變成乙個類中的方法,這個方法就可以直接被類呼叫,不需要依託任何物件。

class

good

: __discount =

0.8def

__init__

(self,name,price)

: self.name = name

self.__price = price

@property

defprice

(self)

:return self.__price * good.__discount

@classmethod

defchange_discount

(cls,new_discount)

: cls.__discount = new_discount

'蘋果',5

)print//4

good.change_discount(

0.5)

print

在完全物件導向的程式中,如果乙個函式既和物件沒有關係,也和類沒有關係,那麼就用staticmethod將這個函式變成乙個靜態方法。

class

login

:def

__init__

(self,username,password)

: self.username = username

self.password = password

deflogin

(self)

:pass

@staticmethod

defget_user_pwd()

: usr =

input

('使用者名稱:'

) pwd =

input

('密碼:'

) login(usr,pwd)

login.get_user_pwd(

)

類方法和靜態方法,都是類呼叫的

物件可以呼叫類方法和靜態方法嗎?可以,一般情況下推薦用類名呼叫

類方法,有乙個預設引數cls 代表這個類

靜態方法沒有預設引數,就像函式一樣

Python全棧開發實戰學習6

把列表 0,1,2,3,4,5,6,7,8,9 中的每個元素加1 a i 1 for i in range 10 print a 結果 1 2,3 4,5 6,7 8,9 10 這樣的寫法就叫做列表生成式 列表是可迭代的,但不是迭代器 l 1 2,3 4,5 6 for i in l 生成了乙個迭代...

Python全棧開發實戰學習7

import module from module import xx from module.xx.xx import xx as rename from module.xx.xx import 編譯原始碼 python setup.py build 安裝原始碼 python setup.py i...

Python全棧開發實戰學習13

class 類名 屬性 方法 pass現實中先有物件後有類 物件1 李坦克 特徵 學校 oldboy 姓名 李坦克 性別 男 年齡 22 技能 吃飯 學習睡覺 物件2 王大陸 特徵 學校 oldboy 姓名 王大陸 性別 男 年齡 21 技能 吃飯 學習睡覺 物件3 牛深度 特徵 學校 oldboy...