python中類似c 靜態方法的乙個記錄

2022-10-01 15:00:21 字數 925 閱讀 1424

個人學習c++出身,在後面的工作中接觸到python,見到一些classmethod的字眼有點疑惑,所以進行一些記錄。

都知道的是,c/c++中有著靜態成員,靜態方法的存在,比如:

class a:

};int main()

上面就是關於乙個靜態方法的乙個宣告和使用,可以看到,靜態方法是直接繫結於物件,由類名加::加靜態方法名直接呼叫,是一種很方便的用法。

然後就是我在python中看到的乙個使用:

class a:

@classmethod

def hello(cls):

print('hello, world')

>>> a.hello()

hello, world

因為是看別人的**,專案太大,一下子不知道這個用法,後來才發現,這就是乙個定義靜態方法的乙個python實現,可以通過a.hello()來呼叫

因此這裡記錄一下,在需要定義這種靜態方法的時候,可以這樣定義,不過靜態方法的引數一定要是cls,不然使用就會報錯,如下:

class a:

@classmethod

def hello():

print('hello, world.')

>>> a.hello()

traceback (most recent call last):

file "", line 1, in typeerror: a.hello() takes 0 positional arguments but 1 was given

如上,我們知道python類方法會在物件例項呼叫方法時,自動傳入物件引數,但這時候好像就不行了,因為它被classmethod修飾器確定為靜態方法,但cls的作用使得它不會自動傳入物件引數(類似c++的this指標)

Java中類似c中memset的方法

c語言的memset 語法 include void memset void buffer,int ch,size t count 功能 函式拷貝ch 到buffer 從頭開始的count 個字元裡,並返回buffer指標。memset 可以應用在將一段記憶體初始化為某個值。例如 memset th...

物件呼叫靜態方法 C 中靜態成員 靜態方法 靜態類

平時在用c 做開發的朋友都知道,不論是靜態成員還是靜態方法還是靜態類都是用static關鍵字來修飾。也就是說只要看到了static,那麼它後面的東西就是靜態!在c 中,靜態成員或者靜態方法是屬於類的,不是屬於物件。假如我們有乙個類myclass,需要例項化這個 類,就應該這麼做 myclass my...

python中類的組成 Python中類似C的結構

更新 資料類 通過引入資料類中的python 3.7,我們非常接近。下面的示例類似於下面的namedtuple示例,但是結果物件是可變的,並且允許使用預設值。from dataclasses import dataclass dataclass class point x float y float...