網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
前言
類中不僅可以有 methods,還可以有變量,這些變量稱為類屬性,例如如下代碼中 Book 類的 TYPES 即為類屬性。
類中的方法分為3類:
1. 實(shí)例方法 instance method
不使用裝飾器
類中的所有方法,如果第一個(gè)參數(shù)是 self,就是 instance method, self 是創(chuàng)建的類實(shí)例,實(shí)例方法與實(shí)例即對(duì)象相關(guān)。
(self 可以改成別的名稱,但使用 self 是convention,self 是類實(shí)例, ),
2. 類方法 class method
使用 @classmethod 裝飾
類方法的第一個(gè)參數(shù)總是 cls。如果方法需要類的信息,用 @classmethod 對(duì)其進(jìn)行裝飾, 類方法經(jīng)常被用作 factory,例如如下代碼中的 hardcover 和 paperback 兩個(gè) class method 方法就是可用于創(chuàng)建對(duì)象的 factory。
(cls 可以改成別的名稱,但使用 cls 是convention)
3. 靜態(tài)方法 static method
使用 @staticmethod 裝飾
靜態(tài)方法并不是真正意義上的類方法,它只是一個(gè)被放到類里的函數(shù)而已。
盡管如此,仍然稱之為方法,但它沒(méi)有關(guān)于 class 或 object 的任何信息,所以它實(shí)際上是一個(gè)獨(dú)立的函數(shù),只是被放到了類里,靜態(tài)方法既沒(méi)有 self 也沒(méi)有 cls 參數(shù) 。(靜態(tài)方法可以訪問(wèn)類屬性,例如 Book.TYPES)
靜態(tài)方法通常用于組織代碼,例如如果認(rèn)為將某個(gè)函數(shù)放到某個(gè)類里,整體代碼會(huì)因此更符合邏輯,于是可以將這個(gè)函數(shù)變成該類的靜態(tài)方法。所以如果需要在類里放一個(gè)函數(shù)進(jìn)去,此函數(shù)不會(huì)用到任何關(guān)于類或?qū)嵗男畔ⅲ敲淳涂梢杂?@staticmethod 對(duì)其進(jìn)行裝飾。
三種方法中,實(shí)例方法和類方法用得最多,靜態(tài)方法不常用。
class Book:
? ? TYPES = ("hardcover", "paperback") ?# 精裝,平裝
? ? def __init__(self, name, book_type, weight):
? ? ? ? self.name = name
? ? ? ? self.book_type = book_type
? ? ? ? self.weight = weight
? ? def __repr__(self):
? ? ? ? return f"<Book {self.name}, {self.book_type}, weighing {self.weight}g>"
? ? def instance_method(self):
? ? ? ? print(f"Called instance method of {self}")
? ? @classmethod
? ? def class_method(cls):
? ? ? ? print(f"called class method of {cls}")
? ? @classmethod
? ? def hardcover(cls, name, paper_weight): ?# cls 名稱任意,使用 cls 是 convention
? ? ?? ?# 下一行的cls,改成 Book,代碼也能跑,但應(yīng)該寫(xiě)成 cls, 以避免在 inheritance 可能會(huì)遇到的問(wèn)題
? ? ? ? return cls(name, cls.TYPES[0], paper_weight + 100) ?#?
? ? @classmethod
? ? def paperback(cls, name, paper_weight):
? ? ?? ?# 下一行的cls,改成 Book,代碼也能跑,但應(yīng)該寫(xiě)成 cls, 以避免在 inheritance 可能會(huì)遇到的問(wèn)題
? ? ? ? return cls(name, cls.TYPES[1], paper_weight)
? ? @staticmethod
? ? def static_method():
? ? ? ? print("Called static method")
book = Book("Dive into Python", Book.TYPES[1], 800)
# Called instance method of <Book Dive into Python, paperback, weighing 800g>
book.instance_method() ?
# 下一行代碼和上一行完全等價(jià)
# Called instance method of <Book Dive into Python, paperback, weighing 800g>
Book.instance_method(book)?
# called class method of <class '__main__.Book'>
Book.class_method()
# Called static method
Book.static_method()
h_book = Book.hardcover("Harry Potter", 1500)
light = Book.paperback("Python 101", 600)
# <Book Harry Potter, hardcover, weighing 1600g>
print(h_book)
# <Book Python 101, paperback, weighing 600g>
print(light)
原文鏈接:https://blog.csdn.net/ftell/article/details/125664788
相關(guān)推薦
- 2022-03-31 Python機(jī)器學(xué)習(xí)應(yīng)用之基于線性判別模型的分類篇詳解_python
- 2023-01-28 python中使用redis用法詳解_Redis
- 2023-02-25 Golang合并yaml文件過(guò)程逐步講解_Golang
- 2022-05-13 C語(yǔ)言中判斷素?cái)?shù)(求素?cái)?shù))的思路與方法實(shí)例_C 語(yǔ)言
- 2022-05-28 Pyinstaller打包Pytorch框架所遇到的問(wèn)題_python
- 2022-03-25 Go語(yǔ)言什么時(shí)候該使用指針(go指針的作用)
- 2022-06-24 淺談React?中的淺比較是如何工作的_React
- 2022-12-30 React代碼分割的實(shí)現(xiàn)方法介紹_React
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支