classa(
object):
a ='a' @staticmethod
deffunc1
(i):
print
('hello'
, i)
deffunc2
(self, i)
:print
('hello'
, i)
@classmethod
deffunc3
(cls, i)
:print
('hello'
, i)
呼叫結果:
if __name__ ==
'__main__'
: a.func1(1)
a.func2(2)
#報錯 typeerror: func2() missing 1 required positional argument: 'i'
a().func2(2)
a.func3(
3)
區別:
靜態函式和類函式可以不需要實列化直接通過類名.方法進行呼叫,物件函式則需要先實列化class()在呼叫函式,class().func()
classa(
object):
a ='a' @staticmethod
deffunc1
(i):
print
('hello'
, i)
print
('1'
,a.a)
a.func2(1)
#typeerror: func2() missing 1 required positional argument: 'i'
a().func2(
)def
func2
(self, i)
:print
('hello'
, i)
print
('2'
,a.a)
print
('2'
,self.a)
a.func1(2)
self.func1(2)
@classmethod
deffunc3
(cls, i)
:print
('hello'
, i)
print
('3'
,a.a)
print
('3'
,cls.a)
a.func2(3)
#typeerror: func2() missing 1 required positional argument: 'i'
a().func2(3)
cls(
).func2(
3)
靜態函式與非靜態函式的區別
靜態成員函式和非靜態成員函式的根本區別在於有無this指標。非靜態函式由物件名或者物件指標 呼叫,呼叫時編譯器會向函式傳遞this指標 靜態成員函式則由類名 或者物件名呼叫 非靜態函式中有this指標,靜態函式中沒有this指標,不能訪問物件的成員函式,成員函式有this指標,const修飾this...
c靜態函式
c程式一直由下列部分組成 1 正文段 cpu執行的機器指令部分 乙個程式只有乙個副本 唯讀,防止程式由於意外事故而修改自身指令 2 初始化資料段 資料段 在程式中所有賦了初值的全域性變數,存放在這裡。3 非初始化資料段 bss段 在程式中沒有初始化的全域性變數 核心將此段初始化為0。5 堆 動態儲存...
靜態函式呼叫
include class point static void init 靜態成員函式 呼叫1 非靜態成員函式和非靜態成員屬於物件的方法和資料,也就是先產生類的物件,然後通過類的物件去引用。void main 呼叫2 靜態成員函式和靜態成員變數屬於類本身,在類載入的時候,即為它們分配了空間,所以可通...