国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python 面向對象編程OOP (三) 類方法,靜態方法

JerryZou / 2567人閱讀

摘要:類的方法概覽首先回顧一下常見的三種方法實例接口方法類方法靜態方法標準書寫方式如下我們最常用的其實就是普通的接口方法,其他兩個需要用類似裝飾器的寫法來標注。類方法接受一個作為參數,它是指向本身的,并不是所創建的實例。

類的方法概覽

首先回顧一下Python OOP常見的三種方法:

instance method 實例/接口方法

class method 類方法

static method 靜態方法

標準書寫方式如下:

class MyClass:
    def method(self):
        return "instance method called", self

    @classmethod
    def classmethod(cls):
        return "class method called", cls

    @staticmethod
    def staticmethod():
        return "static method called"

我們最常用的其實就是普通的接口方法,其他兩個需要用類似裝飾器的寫法來標注。

類方法接受一個cls作為參數,它是指向MyClass本身的,并不是MyClass所創建的實例。

靜態方法不接受self或者cls作為參數,所以不會修改類本身或者實例

類方法示例

看一下如何使用類方法,新建一個Pizza類,主要參數為原料ingredients

class Pizza:
    def __init__(self, ingredients):
        self.ingredients = ingredients

    def __repr__(self):
        return f"Pizza({self.ingredients !r})"

新建一個實例測試一下:

Pizza(["cheese", "tomatoes"])
Out: Pizza(["cheese", "tomatoes"])

測試成功。
現在問題來了,既然是Pizza類,會有不同口味的Pizza,他們的配方都是固定的,那么如何便捷的生成不同口味的Pizza呢,答案就是classmethod

class Pizza:
    def __init__(self, ingredients):
        self.ingredients = ingredients

    def __repr__(self):
        return f"Pizza({self.ingredients!r})"

    @classmethod
    def margherita(cls):
        return cls(["mozzarella", "tomatoes"])

    @classmethod
    def prosciutto(cls):
        return cls(["mozzarella", "tomatoes", "ham"])

類方法可以根據需求事先預定義生成的實例,減少了代碼量,這里我們根據margherita和prosciutto兩種口味pizza的原料提前準備好了,cls就是代表類本身,這樣如果我們再生成一些實例時,會方便很多:

#生成一個margherita口味的pizza
m = Pizza.margherita()
m
Out:Pizza(["mozzarella", "tomatoes"])
#生成一個prosciutto口味的pizza
p = Pizza.prosciutto()
p
Out:Pizza(["mozzarella", "tomatoes", "ham"])
靜態方法示例

那么什么時候用靜態方法呢? 比如還用這個例子,我想計算pizza的面積:

import math

class Pizza:
    def __init__(self, radius, ingredients):
        self.radius = radius
        self.ingredients = ingredients

    def __repr__(self):
        return (f"Pizza({self.radius!r}, "
                f"{self.ingredients!r})")

    def area(self):
        return self.circle_area(self.radius)

    @staticmethod
    def circle_area(r):
        return r ** 2 * math.pi

這種情況下使用一個靜態方法是一個好的選擇,通過area這個普通的接口方法,可以調用circle_area來計算面積,封裝性更好:

p = Pizza(4, ["mozzarella", "tomatoes"])
p.area() 

Out: 50.26548245743669
總結

這次簡單總結了類中的三種方法,通過Pizza類的實例方便理解,如果大家有想和我溝通交流的,歡迎留言,或者點擊以下鏈接訪問我的網站:

我的Github 靜態博客

謝謝閱讀

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/45182.html

相關文章

  • Python OOP 面向對象編程

    摘要:時代,如果需要手動繼承,如多態多態是指,不同的子類對象調用相同的父類方法,會產生多態多樣結果的編程特性。 參考:黑馬程序員教程 - Python基礎 面向對象 OOP三大特性,且三個特性是有順序的: 封裝 繼承 多態 封裝 指的就是把現實世界的事務,封裝、抽象成編程里的對象,包括各種屬性和方法。這個一般都很簡單,不需要多講。 唯一要注意的就是:推薦從小往大開始封裝、開發類。比如手槍...

    weknow619 評論0 收藏0
  • 【數據科學系統學習】Python # 編程基礎[]

    摘要:新的稱為子類,而被繼承的稱為基類父類或超類。繼承最大的好處是子類獲得了父類的全部功能。在繼承關系中,如果一個實例的數據類型是某個子類,那它的數據類型也可以被看做是父類。 在上一篇中我們介紹了模塊和數據結構,這一篇將介紹面向對象編程。 面向對象編程 面向對象編程——Object Oriented Programming,簡稱 OOP,是一種程序設計思想。OOP 把對象作為程序的基本單元...

    molyzzx 評論0 收藏0
  • [零基礎學python]關于的初步認識

    摘要:反對者在某些領域對此予以否認。下面再引用一段來自維基百科中關于的歷史。類的更嚴格的定義是由某種特定的元數據所組成的內聚的包。類還可以有運行時表示形式元對象,它為操作與類相關的元數據提供了運行時支持。 在開始部分,請看官非常非常耐心地閱讀下面幾個枯燥的術語解釋,本來這不符合本教程的風格,但是,請看官諒解,因為列位將來一定要閱讀枯燥的東西的。這些枯燥的屬于解釋,均來自維基百科。 1、問題...

    王巖威 評論0 收藏0
  • SegmentFault 技術周刊 Vol.32 - 七夕將至,你的“對象”還好嗎?

    摘要:很多情況下,通常一個人類,即創建了一個具體的對象。對象就是數據,對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    李昌杰 評論0 收藏0

發表評論

0條評論

JerryZou

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<