<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
類中不僅可以有 methods,還可以有變數,這些變數稱為類屬性,例如如下程式碼中 Book 類的 TYPES 即為類屬性。
類中的方法分為3類:
不使用裝飾器
類中的所有方法,如果第一個引數是 self,就是 instance method, self 是建立的類範例,實體方法與範例即物件相關。
(self 可以改成別的名稱,但使用 self 是convention,self 是類範例, ),
使用 @classmethod 裝飾
類方法的第一個引數總是 cls。如果方法需要類的資訊,用 @classmethod 對其進行裝飾, 類方法經常被用作 factory,例如如下程式碼中的 hardcover 和 paperback 兩個 class method 方法就是可用於建立物件的 factory。
(cls 可以改成別的名稱,但使用 cls 是convention)
使用 @staticmethod 裝飾
靜態方法並不是真正意義上的類方法,它只是一個被放到類裡的函數而已。
儘管如此,仍然稱之為方法,但它沒有關於 class 或 object 的任何資訊,所以它實際上是一個獨立的函數,只是被放到了類裡,靜態方法既沒有 self 也沒有 cls 引數 。(靜態方法可以存取類屬性,例如 Book.TYPES)
靜態方法通常用於組織程式碼,例如如果認為將某個函數放到某個類裡,整體程式碼會因此更符合邏輯,於是可以將這個函數變成該類的靜態方法。所以如果需要在類裡放一個函數進去,此函數不會用到任何關於類或範例的資訊,那麼就可以用 @staticmethod 對其進行裝飾。
三種方法中,實體方法和類方法用得最多,靜態方法不常用。
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,程式碼也能跑,但應該寫成 cls, 以避免在 inheritance 可能會遇到的問題 return cls(name, cls.TYPES[0], paper_weight + 100) # @classmethod def paperback(cls, name, paper_weight): # 下一行的cls,改成 Book,程式碼也能跑,但應該寫成 cls, 以避免在 inheritance 可能會遇到的問題 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() # 下一行程式碼和上一行完全等價 # 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)
到此這篇關於Python 類方法和靜態方法之間的區別的文章就介紹到這了,更多相關Python類方法內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45