導航:首頁 > 編程語言 > 實例方法和類方法python

實例方法和類方法python

發布時間:2023-01-24 16:58:20

python 類方法,靜態方法,普通方法比較2019-03-22

1.類方法用@classmethod:

        用途:一般用來對類屬性進行限制性操作

        用法:該方法的調用者(不管是類調用還是實例調用),會默認把該類作為第一個參數傳進來(調用者不必顯示指定),這樣該方法內部可以獲取到該類,從而對類屬性進行操作。實際用途可以用來限制對類屬性的訪問,不管是類調用還是實例調用,能保證修改的都是類屬性。

2.靜態方法用@staticmethod:

        用途:用來實現工具性方法

        用法:如果方法內部沒有涉及到對實例屬性的操作,可以把該方法定義為靜態方法,不管是類調用還是實例調用,都能直接調用該方法實現相應功能。

3.普通方法:

        用途:實例調用的方法

        用法:方法內部涉及到對實例屬性的操作,實例調用該方法時會自動默認將實例的引用作為第一個參數傳進去。也可以用類直接訪問,不過這樣訪問時需要手動傳入第一個參數,也就是一個實例的引用。

附加: @property的使用(從語義規范上來說,只用於普通方法,也就是對實例變數進行控制,但也可以強行用來對類變數進行控制)

對私有變數的控制訪問可以借鑒java的get、set方式。這沒有任何問題。唯一的問題就是不直觀,把對變數的訪問變成了對方法的訪問。而@property的作用就是還原這種直觀的訪問方式,可以像訪問變數一樣訪問@property修飾的方法。注意:如果不想讓別人修改某變數,可以用不寫@XXX.setter方法來實現。

總結:不管方法是哪一種方法(類方法,靜態方法,還是普通的實例方法),都可以用類直接訪問和用實例進行訪問,只是參數多傳一個多傳一個的問題。更重要的是語義的規范,語法上沒什麼問題。

㈡ Python中靜態方法和類方法的區別

面相對象程序設計中,類方法和靜態方法是經常用到的兩個術語。
邏輯上講:類方法是只能由類名調用;靜態方法可以由類名或對象名進行調用。
在C++中,靜態方法與類方法邏輯上是等價的,只有一個概念,不會混淆。
而在python中,方法分為三類實例方法、類方法、靜態方法。代碼如下:
class Test(object):
def InstanceFun(self):
print("InstanceFun");
print(self);
@classmethod
def ClassFun(cls):
print("ClassFun");
print(cls);
@staticmethod
def StaticFun():
print("StaticFun");
t = Test();
t.InstanceFun();# 輸出InstanceFun,列印對象內存地址「」
Test.ClassFun(); # 輸出ClassFun,列印類位置
Test.StaticFun(); # 輸出StaticFun
t.StaticFun(); # 輸出StaticFun
t.ClassFun(); # 輸出ClassFun,列印類位置
Test.InstanceFun(); # 錯誤,TypeError: unbound method instanceFun() must be called with Test instance as first argument

Test.InstanceFun(t); # 輸出InstanceFun,列印對象內存地址「」
t.ClassFun(Test); # 錯誤 classFun() takes exactly 1 argument (2 given)
可以看到,在PYTHON中,兩種方法的主要區別在於參數。實例方法隱含的參數為類實例self,而類方法隱含的參數為類本身cls。
靜態方法無隱含參數,主要為了類實例也可以直接調用靜態方法。

所以邏輯上類方法應當只被類調用,實例方法實例調用,靜態方法兩者都能調用。主要區別在於參數傳遞上的區別,實例方法悄悄傳遞的是self引用作為參數,而類方法悄悄傳遞的是cls引用作為參數。
Python實現了一定的靈活性使得類方法和靜態方法,都能夠被實例和類二者調用

㈢ 什麼是Python的類,方法,對象,實例其中方法,對象,實例的概念相當模糊。請高手幫忙,謝謝!

類,簡單來說就是一個函數的集合,在這個集合裡面你定義了很多個函數;方法,其實就是你定義的這些函數。在下面的例子中Class Plus就是一個類,嵌套在這個類裡面的兩個函數就是所謂的方法,但是__init__只是用於初始化這個類,所以不算是方法。而get_result這個函數就是一個方法了。
舉個例子:
Class Plus:
def __init__(self, a,b)
self.a = a
self.b = b
def get_result(self)
return self.a + self.b
在上面這個例子中,self就是對象,這個對象裡面有兩個參數,一個是self.a,另一個是self.b,對象簡單來說就是自身具有多個屬性(也可以說是子變數)的變數而已。如果說對象是籠統的東西,那麼實例就是具體的東西。對象只是一個模板,有一些屬性,而實例就是把數據填到這個模板裡面去。比如這里你再這樣寫:c1 = Plus(1,2),這里c1就是一個實例,你還可以加一句:c2 = Plus(2,3),那c2也是一個實例,但是他們擁有共同的屬性和模板。下面的例子就是調用了類裡面的方法:
result1 = c1.get_result() >>> 3 輸出結果為3
result2 = c2.get_result() >>> 5 輸出結果為5

㈣ python 如何調用類的方法

以numpy為例,首先創建一個對象:

In[32]:a=numpp.arange(10)

然後,a就擁有了類的方法,例如求和:

In[33]:a.sum()
Out[33]:45

也可以使用類的方法,將其應用到類的對象上,例如:

In[34]:numpp.sum(a)
Out[34]:45

㈤ Python中類與實例的其他說明解釋

9.4. 一些說明
數據屬性會覆蓋同名的方法屬性。為了避免意外的名稱沖突,這在大型程序中是極難發現的 Bug,使用一些約定來減少沖突的機會是明智的。可能的約定包括:大寫方法名稱的首字母,使用一個唯一的小字元串(也許只是一個下劃線)作為數據屬性名稱的前綴,或者方法使用動詞而數據屬性使用名詞。
數據屬性可以被方法引用,也可以由一個對象的普通用戶(客戶)使用。換句話說,類不能用來實現純凈的數據類型。事實上,Python 中不可能強制隱藏數據——一切基於約定(如果需要,使用 C 編寫的 Python 實現可以完全隱藏實現細節並控制對象的訪問。這可以用來通過 C 語言擴展 Python)。
客戶應該謹慎的使用數據屬性——客戶可能通過踐踏他們的數據屬性而使那些由方法維護的常量變得混亂。注意:只要能避免沖突,客戶可以向一個實例對象添加他們自己的數據屬性,而不會影響方法的正確性——再次強調,命名約定可以避免很多麻煩。
從方法內部引用數據屬性(或其他方法)並沒有快捷方式。我覺得這實際上增加了方法的可讀性:當瀏覽一個方法時,在局部變數和實例變數之間不會出現令人費解的情況。
一般,方法的第一個參數被命名為 self。這僅僅是一個約定:對 Python 而言,名稱 self 絕對沒有任何特殊含義。(但是請注意:如果不遵循這個約定,對其他的 Python 程序員而言你的代碼可讀性就會變差,而且有些 類查看器 程序也可能是遵循此約定編寫的。)
類屬性的任何函數對象都為那個類的實例定義了一個方法。函數定義代碼不一定非得定義在類中:也可以將一個函數對象賦值給類中的一個局部變數。例如:
# Function defined outside the class
def f1(self, x, y):
return min(x, x+y)
class C:
f = f1
def g(self):
return 'hello world'
h = g
現在 f, g 和 h 都是類 C 的屬性,引用的都是函數對象,因此它們都是 C 實例的方法-- h 嚴格等於 g 。要注意的是這種習慣通常只會迷惑程序的讀者。

㈥ python3 靜態方法和類方法的區別

python中,方法分為三類實例方法、類方法、靜態方法。代碼如下:
class Test(object):

def InstanceFun(self):

print("InstanceFun");
print(self);
@classmethod

def ClassFun(cls):
print("ClassFun");
print(cls);
@staticmethod

def StaticFun():
print("StaticFun");
t = Test();

t.InstanceFun();# 輸出InstanceFun,列印對象內存地址「<__main__.Test object at 0x0293DCF0>」
Test.ClassFun(); # 輸出ClassFun,列印類位置 <class '__main__.Test'>
Test.StaticFun(); # 輸出StaticFun
t.StaticFun(); # 輸出StaticFun
t.ClassFun(); # 輸出ClassFun,列印類位置 <class '__main__.Test'>
Test.InstanceFun(); # 錯誤,TypeError: unbound method instanceFun() must be called with Test instance as first argument

Test.InstanceFun(t); # 輸出InstanceFun,列印對象內存地址「<__main__.Test object at 0x0293DCF0>」
t.ClassFun(Test); # 錯誤 classFun() takes exactly 1 argument (2 given)

㈦ python 類中類方法和類實例有什麼區別

類方法是指類中的函數方法

類實例則指生成的類對象

classmyclass:
def__init__(self):
pass
defp(self):
print('hehe')
obj=myclass()
obj.p()

obj就是實例

p()就是方法

㈧ python什麼是類,對象,實例

類和對象
對象是什麼?

對象=屬性(靜態)+方法(動態);

屬性一般是一個個變數;方法是一個個函數;

#類的屬性 就是 類變數

#實例變數:定義在方法中的變數,只作用於當前實例的類。

例子:

class Turtle:#python 中類名約定以大寫字母開頭
'''關於類的簡單例子。。。'''
#屬性 == 類變數
color ="green"
weight="10kg"
legs=4
shell=True
mouth='big'
#方法
def climb(self):
self.name = "test" #實例變數:定義在方法中的變數,只作用於當前實例的類。
print("我在很努力爬。")
def run(self):
print('我在很努力跑。')
def bite(self):
print('我要要要要要')
def sleep(self):
print('我要睡覺啦。')
#創建一個實例對象也就是類的實例化!
tt =Turtle() #類的實例化,也就是創建一個對象,類名約定大寫字母開頭
tt.bite() #創建好類後就能調用類裡面的方法叻;
tt.sleep()

㈨ python3 類和實例的作用

Python調用其他類的方法時候要注意引用的時是靜態方法還是類方法。意思就是調用其它類的方法(不管是不是引用別的包,如果引用保證引用路徑正確,同時分清楚是import引用還是from……import引用的)。如果是引用類的靜態方法直接點取方法就可以了,例如:B.b.fun()。如果是類方法就要新建一個類的實例才能引用類的方法,例如:B.b().fun(),其實就是看這個類方法有沒有self(有的地方也用cls)這個參數。有的話就要通過類的實例引用,沒有的話就直接引用

閱讀全文

與實例方法和類方法python相關的資料

熱點內容
李時珍的電影全部 瀏覽:227
安卓10編譯伺服器硬體配置 瀏覽:957
什麼樣的主機適合當伺服器 瀏覽:856
衣服哪裡進貨app 瀏覽:516
解壓神器魔術 瀏覽:770
寬頻連接2如何連接伺服器地址 瀏覽:365
隨機信號估計演算法 瀏覽:860
安卓如何重壓開槍 瀏覽:377
航天時代飛鵬圖像處理演算法 瀏覽:521
php比較兩個文件 瀏覽:737
加密貨幣市場活躍 瀏覽:334
最便宜的雲盤伺服器架設傳奇 瀏覽:790
java反向工程 瀏覽:110
pdf文檔轉換excel 瀏覽:8
主角叫楚天的都市小說 瀏覽:754
程序員三重境界 瀏覽:871
菜雞方舟上怎麼開伺服器 瀏覽:727
馬林固件編譯錯誤 瀏覽:910
市場營銷案例pdf 瀏覽:770
魔爪閱讀網 瀏覽:19