python靜態方法和類方法、裝飾器


一、靜態方法和類方法

1.靜態調用:@staticmethod

class A(object):
    @staticmethod
    def a():
        print('a')
A.a()

  如果類中需要非該類成員存在,則可以使用靜態調用的方法

2.示例

輸入四條邊判斷是否它是正方形,如果是:計算面積,用@staticmethod

class zfx(object):
    def __init__(self,a,b,c,d):
        self.a=a
        self.b=b
        self.c=c
        self.d=d
    @staticmethod
    def is_valid(a,b,c,d):
        for i in [b,c,d]:
            if i !=a:
                return False
        else:
            return True
    
    def area(self):
        if res == True:
            area_ = self.a *self.b
            return area_

fx = zfx(5,5,5,5)
res = fx.is_valid(5,5,5,5)
fx.area()
if res == True:
    print(fx.area())

  

3.類方法

(1)默認值:

def A(bl = 'hello'):
    print(bl)
A()

  輸出結果為:hello

(2)cocaltime

#調用localtime這個庫:
from time import time,localtime,sleep
print(time())

  時間戳,從1970年1月1日00.00.00開始到現在經歷過的秒數

(3)@classmethod

@classmethod:獲取自身類(cls)中的屬性,並且可以更改.
classmethod 修飾符對應的函數不需要實例化,不需要 self 參數,但第一個參數需要是表示自身類的 cls 參數,可以來調用類的屬性,類的方法,實例化對象等

 

4.類與類之間的關系(繼承)

(1)第一步要類名中寫上繼承的類

(2)建議用類名(classname)__init__(self):a.__init__(self)

(3)示例:創建一個父類創建一個子類,父類計算兩個數字的和計算SUM_,子類打印這個SUM_

class fu(object):
    def __init__(self):
        self.a = 10
        self.b = 20
    def sum_(self):
        sum=self.a + self.b
        return sum
class zi(fu):
    def __init__(self):
        fu.__init__(self)
    def PRINT(self):
        res = self.sum_()
        print(res)
b= zi()
b.PRINT()

  輸出:30

5.列表生成式和列表生產器

#列表生成式
a = [x for x in range(100)]
    print(a)
#列表生成器
a = (x for x in range(100))
    print(a)

  列表生成式與列表生成器的優缺點:

(1)生成式:

優點: 計算速度快,因為一次性已經全部加載到內存中了,適合數據量不是太大的情況10000- 2000-
缺點: 占用內存

(2)生成器:

優點: 節約內存空間
缺點: 計算速度慢,因為要生成

二、裝飾器

1.函數的閉包:函數包函數

2.裝飾器的用法:先走裝飾器再走函數

3.裝飾器示例:創建三個函數,兩個參數,裝飾器處理這兩個參數的和,每一個函數打印這兩個參數

def Joker(func):

​    def warp(n1,n2,n3):

​        num = n1 + n2

​        return func(0,num,n3)

​    return warp



*裝飾器將前兩個數字求和,函數本身第三個參數乘上這個和*

@Joker

def SUM(num1,num2,num3):

​    print(num1,num2,num3)

​    print(num2 * num3)



SUM(10,2,3)

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM