類方法,靜態方法

2022-09-09 04:36:14 字數 1681 閱讀 4695

#7.靜態方法與類方法

#按引數區分

# 例項方法

## 定義:第乙個引數必須是例項物件,該引數名一般約定為「self」,通過它來傳遞例項的屬性和方法(也可以傳類的屬性和方法);

## 呼叫:只能由例項物件呼叫。

# 靜態方法

## 定義:使用裝飾器@staticmethod。引數隨意,沒有「self」和「cls」引數,但是方法體中不能使用類或例項的任何屬性和方法;

# 可以理解為,靜態方法是個獨立的、單純的函式,它僅僅託管於某個類的命名空間中,便於使用和維護。

## 呼叫:例項物件和類物件都可以呼叫。

import time

class timetest(object):

def __init__(self, hour, minute, second):

self.hour = hour

self.minute = minute

self.second = second

@staticmethod#用這個標記的,就是靜態方法,無需傳參self,可以用類直接呼叫

def showtime():

return time.strftime("%h:%m:%s", time.localtime())

#靜態方法是類中的函式,不需要例項。靜態方法主要是用來存放邏輯性的**,主要是一些邏輯屬於類,

# 但是和類本身沒有互動,即在靜態方法中,不會涉及到類中的方法和屬性的操作。可以理解為將靜態方法存在此類的命名空間中。

print(timetest.showtime())

t = timetest(2, 10, 10)

nowtime = t.showtime()#靜態方法由類和物件都可以呼叫

print(nowtime)

# 類方法

## 定義:使用裝飾器@classmethod。第乙個引數必須是當前類物件,該引數名一般約定為「cls」,

# 通過它來傳遞類的屬性和方法(不能傳例項的屬性和方法);

## 原則上,類方法是將類本身作為物件進行操作的方法。假設有個方法,且這個方法在邏輯上採用類本身作為物件來呼叫更合理,

# 那麼這個方法就可以定義為類方法。另外,如果需要繼承,也可以定義為類方法。

# 呼叫:例項物件和類物件都可以呼叫

class classtest(object):

__num = 0

@classmethod

def addnum(cls):

cls.__num += 1

@classmethod

def getnum(cls):

return cls.__num

# 這裡我用到魔術函式__new__,主要是為了在建立例項的時候呼叫人數累加的函式。

def __new__(self):

classtest.addnum()

return super(classtest, self).__new__(self)

class student(classtest):

def __init__(self):

self.name =''

a = student()

b = student()

print(classtest.getnum())

#

類方法,靜態方法

coding utf 8 class test object walk 為普通方法只能被物件instance呼叫,play 為靜態方法可以被物件和classname呼叫,eat為類方法,可以被物件和classname呼叫。此外pep8中一種程式設計風格,self通常用作例項方法的第一引數,cls通常...

類方法 靜態方法

類方法 class goods discount 0.8 def init self,name,price self.name name self.price price property def price self return self.price goods.discount classme...

靜態屬性 類方法 靜態方法

靜態屬性 既可以訪問例項屬性也可以訪問類屬性 self 1 靜態屬性 資料屬性 2 class room 3 def init self,name,owner,width,length,height 4 self.name name 5 self.owner owner 6 self.width w...