當前位置:首頁 » 編程語言 » python調用靜態方法調用

python調用靜態方法調用

發布時間: 2024-10-22 19:23:51

python 靜態方法可以訪問類方法嗎

Python的靜態方法和類成員方法都可以被類或實例訪問,兩者概念不容易理清,但還是有區別的:
1)靜態方法無需傳入self參數,類成員方法需傳入代表本類的cls參數;
2)從第1條,靜態方法是無法訪問實例變數的,而類成員方法也同樣無法訪問實例變數,但可以訪問類變數;
3)靜態方法有點像函數工具庫的作用,而類成員方法則更接近類似Java面向對象概念中的靜態方法。

實現靜態方法和類方法的兩種方式
一、在Python 2.3及之前,用staticmethod和classmethod類型對象包裝實現
例子如下(注意print里的說明):
class MyClass:
val1 = 'Value 1'
def __init__(self):
self.val2 = 'Value 2'
def staticmd():
print '靜態方法,無法訪問val1和val2'
smd = staticmethod(staticmd)

def classmd(cls):
print '類方法,類:' + str(cls) + ',val1:' + cls.val1 + ',無法訪問val2的值'
cmd = classmethod(classmd)

執行:
>>> mc = MyClass()
>>> mc.smd()
>>> mc.cmd()
>>> MyClass.smd()
>>> MyClass.cmd()

二、在Python 2.4及之後,用裝飾器(decorators)實現
裝飾器使用@操作符,例子如下:
class MyClass:
val1 = 'Value 1'
def __init__(self):
self.val2 = 'Value 2'

@staticmethod
def staticmd():
print '靜態方法,無法訪問val1和val2'

@classmethod
def classmd(cls):
print '類方法,類:' + str(cls) + ',val1:' + cls.val1 + ',無法訪問val2的值'

Ⅱ python——Django項目開發:配置項目/static/路徑,調用css、img、js等靜態文件

在Django項目開發中,不能像正常web開發一樣通過 'imgs/bg.jpg' 訪問本地靜態文件,需要做一些配置,才能實現靜態文件的訪問。

一、首先在項目根路徑下新建一個static文件夾,然後在static文件夾下可以新建相應的css、imgs、js等文件夾,用於存放css、img、js等靜態文件。

二、項目配置

1、打開settings.py,在底部添加:

2、打開urls.py,在 urlpatterns 中添加:(注意,如果你在blog目錄下也建立了urls.py,那麼就得在blog/urls.py中做修改。別忘了import settings):

(不過我經過實測,不加這一個,也可以完成靜態文件的訪問)
3、在html模板最上面添加:

然後在需要的地方按照這個格式進行調用,如:

最後重新運行項目,img等本地靜態文件就可以被django找到了,這時模板對應的頁面就可以顯示使用img等文件了。

Ⅲ 在調用一些Python里的函數的時候 為什麼有些函數需要實例化有些不需要

如果一個方法是靜態方法或類方法,那麼,可以直接調用。
如果一個方法不是靜態的,那麼,它會需要self來訪問實例中的某些屬性,那麼就只能在實例上調用。
你給出的代碼中,tensor_trans = transforms.ToTensor()這一句,實際上只是簡化引用,並沒有實例化transforms。
作為示例:
class MyUtil(object):
....@staticmethod

....def fn1():
........return 'a'

....def fn2(self):

........return 'b'
對方法fn1,我們可以直接調用:
x = MyUtil.fn1()
但對於fn2,則只能實例化後調用:
util=MyUtil()
x = util.fn2()
當然,對於fn1,也可以在實例上調用:
util=MyUtil()
x = util.fn1()

Ⅳ 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調用方法,有的前面加類名,有的不加

答: Python使用面向對象的方法進行編程時,確實有兩種調用方法。第一,當被調用的方法是靜態方法,那麼這個時候無須實例化對象,直接按照類名.函數名格式即可,如math.sin(),在該函數的底層實現當中,使用了@staticmethod聲明靜態方法,我的理解是這樣的,當某個方法經常被使用時,把它聲明成靜態方法會方便一些;第二,當被調用方法是非靜態方法時,則必須先實例化一個對象,再進行方法調用。希望能夠幫助到你。

例子

Ⅵ Python中的面向對象(進階)

一、實例方法,類方法,靜態方法

我們首先寫一個類,裡麵包含這三種方法。

可以看到,我們用到了兩個裝飾器。

我們用類和實例分別調用下類方法

我們用類和實例分別調用下靜態方法

靜態方法其實就是把一個普通的函數寫在類里,與直接在外層寫一個函數是一樣的,本質上是一個函數。

為了方便理解,我們分別列印下這些方法的類型

通過type()查看對象是方法還是函數

此外,還可以通過inspect模塊判斷某個對象是否是某種類型,返回布爾值。

用法


小Tips:概念理解

直接def定義的,我們叫做函數

把函數放到類里,我們叫做方法

方法可以通過裝飾器staticmethod轉為(放在方法里的)函數

繼承

一個類繼承另一個類時,會自動獲得另一個類的所有屬性和方法,被繼承的類稱之為父類,新類稱為子類。子類擁有父類所有的屬性和方法,並且可以定義自己的屬性和方法

我們以上邊的Rectangle類為父類來試一下


1)完全繼承

可以看到,子類完全繼承父類後,可以直接調用父類的所有方法。

2)部分繼承

部分繼承:繼承父類後,修改父類的同名方法

我們試一下,Square繼承Rectangle後,修改__init__()方法

3)拓展父類的方法

在保留父類中某個方法的代碼同時,對方法進行拓展

可以在方法中加入"super().方法名"來實現


4)@property

熱點內容
python怎麼打開idle 發布:2024-10-22 21:25:56 瀏覽:754
安卓開發版怎麼設置中文 發布:2024-10-22 21:18:09 瀏覽:941
安卓系統未找到固件怎麼辦 發布:2024-10-22 21:18:03 瀏覽:183
解壓捏煙 發布:2024-10-22 21:17:57 瀏覽:388
二維otsu演算法 發布:2024-10-22 21:06:23 瀏覽:634
福祿壽源碼 發布:2024-10-22 21:06:13 瀏覽:434
pythongoagent 發布:2024-10-22 20:42:05 瀏覽:78
matlabpid演算法 發布:2024-10-22 20:37:51 瀏覽:332
文件遍歷編程 發布:2024-10-22 20:37:47 瀏覽:622
nip伺服器地址在哪 發布:2024-10-22 20:17:48 瀏覽:621