#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...