① python 什麼時候用類方法
用class來聲明一個類,也就是創建了一個類。使用class關鍵字,後面接類的名稱,然後一個冒號
還有兩種寫法,他們都是等價的。
聲明類以後,我們使用__init__函數來重載構造函數,如圖所示,在類中都有一個self參數,他是任何類都有的,代表實例本身,假如我們想要給實例設置一個name屬性,那麼我們用下面的方法來設置。__init__後面的參數都可以在創建實例的時候使用。
當然我們可以任意設置__init__方法的參數個數
通常我們使用__del__函數來重載析構函數,不過如果你沒有在類的聲明中寫這個方法,它也會默認加上去的。所以,通常都不寫。。。
你還可以在類中聲明一個方法,然後在創建實例以後,我們再調用方法。聲明方法如下:
創建實例
創建實例我們用賦值的方式,我們可以直接將參數輸入到類中。然後用p.name來調用類的屬性。
② python類方法和靜態方法有什麼用
主要特點就是需要綁定到一個對象上,python解析器會自動把實例自身傳遞給方法,如14行所示,而直接使用InstanceMethod.f1()調用方法是不行的。
class InstanceMethod(object):
def __init__(self, a):
self.a = a
def f1(self):
print 'This is {0}.'.format(self)
def f2(self, a):
print 'Value:{0}'.format(a)
if __name__ == '__main__':
# im = InstanceMethod()
im = InstanceMethod('233')
im.f1()
# im.f2()
im.f2(233)
③ python類中的 方法 屬性分別什麼意思
就比方說有一個類叫做car
這個類的屬性可以有colorsizebrandpriceyear等描述性的東西
這個類的方法可以是runstopforwardbackward等執行性的東西
classcar:
#定義基本屬性
color=''
size=0
brand=''
price=0
year=0
#定義構造方法
def__init__(self):
self.color=color
self.size=size
self.brand=brand
self.price=price
self.year=year
defrun(self):
print("thecarisrunning")
defstop(self):
print("thecarisstop")
defforward(self):
print("thecarisforward")
defbackward(self):
print("thecarisbackward")
#類調用
benz=car('red',1.8T,'Mercedes',400000,2016)
benz.run()
benz.stop()
benz.forward()
benz.backward()
④ python類方法問題
@classmethod
defnew_square(cls,side_length):
returncls(side_length,side_length)
@classmethod表示函數new_square是Rectangle類裡面創建一個成員函數
cls表示調用當前的類名
side_length是函數的一個要傳的參數
returncls(side_length,side_length)表示返回調用Rectangle類的構造函數def__init__(self,width,height)初始化後的類
所以square=Rectangle.new_square(5)表示調用Rectangle類的成員函數new_square,初始化Rectangle類並返回
print(square.calculate_area())表示調用Rectangle類的計算面積函數,並列印輸出
因此5傳給side_length變數,又調用__init__函數為self.width和self.height賦值為5,
調用print(square.calculate_area())列印self.width*self.height=5*5=25
⑤ python 類中類方法和類實例有什麼區別
類方法是指類中的函數方法
類實例則指生成的類對象
classmyclass:
def__init__(self):
pass
defp(self):
print('hehe')
obj=myclass()
obj.p()
obj就是實例
p()就是方法
⑥ 實例方法和類方法的區別 python
有區別的,最主要的區別在於,定義類方法主要是要加一個裝飾器,@classmethod
而實例方法沒有這個裝飾器。這是區別實例方法和類方法的最主要的區別。
在調用上的區別在於,實例方法要先實例化一個對象再調用這個實例化方法,而類方法不需要有類的實例,直接類名.方法名就可以調用。
實例方法至少有一個參數,通常用self,這個參數裡面是這個實例本身。類方法至少有一個參數,通常用cls,這個參數裡面是這個類本身。
實例方法由於有實例,所以實例的屬性對其實可見的,但類方法顯然沒有屬性。
本質上來講,類方法和實例方法沒有本質區別,只不過在調用的時候,實例方法把這個實例本身當做參數傳過去了。
以下是示例代碼,感受一下。
classmyclass:
@classmethod
defclassMethod(cls):
print('classmethod')
print('parameter:%s'%cls)
pass
definstanceMethod(self):
print('instancemethod')
print('parameter:%s'%self)
pass
m=myclass()
m.instanceMethod()#實例來調用實例方法
myclass.classMethod()#類名.方法名調用類方法
myclass.instanceMethod(m)#類名.方法名,並將實例作為參數傳入,和實例調用實例方法一樣
⑦ python中可以直接用類調用方法嗎
這里先肯定的回答一下:可以
python里方法在類中是作為類的屬性的,在解釋之前,這邊先給個例子
>>>classPizza(object):
...radius=42
...def__init__(self,size=10):
...self.size=size
...defget_size(self):
...returnself.size
...@staticmethod
...defmix_ingredients(x,y):
...returnx+y
...defcook(self):
...returnself.mix_ingredients(self.cheese,self.vegetables)
...@classmethod
...defget_radius(cls):
...returncls.radius
>>>Pizza.get_size
<unboundmethodPizza.get_size>
>>>Pizza.get_size()
Traceback(mostrecentcalllast):
File"<stdin>",line1,in<mole>
TypeError:unboundmethodget_size()(gotnothinginstead)
>>>Pizza.get_size(Pizza(42))
42
>>>Pizza(42).get_size
<boundmethodPizza.get_sizeof<__main__.Pizzaobjectat0x7f3138827910>>
>>>Pizza(42).get_size()
42
>>>m=Pizza(42).get_size
>>>m()
42
>>>m=Pizza(42).get_size
>>>m.__self__
<__main__.Pizzaobjectat0x7f3138827910>
>>>m==m.__self__.get_size
True
>>>Pizza().cookisPizza().cook
False
>>>Pizza().mix_ingredientsisPizza.mix_ingredients
True
>>>Pizza().mix_ingredientsisPizza().mix_ingredients
True
>>>Pizza.get_radius
<boundmethodtype.get_radiusof<class'__main__.Pizza'>>
>>>Pizza().get_radius
<boundmethodtype.get_radiusof<class'__main__.Pizza'>>
>>>Pizza.get_radiusisPizza().get_radius
True
>>>Pizza.get_radius()
42
在上面的例子中可以看出python中類有三種方法,分別是類方法,靜態方法,實例方法。而能讓類只接調用的只有類方法,或通過一些小技巧,類也可以調用實例方法如上面例子中的調用
>>>Pizza.get_size(Pizza(42))
42
這邊順便說明下這三中方法的區別
1類方法的特點是類方法不屬於任何該類的對象,只屬於類本身
2類的靜態方法類似於全局函數,因為靜態方法既沒有實例方法的self參數也沒有類方法的cls參數,誰都可以調用
3.實例方法只屬於實例,是實例化的對象才能調用
⑧ Python中靜態方法和類方法的區別
靜態方法是調用時跟具體實例沒有關聯的方法,不需要使用self和cls參數。
類方法是調用的時候,要使用類的相關成員的方法,需要使用cls參數,但不用self參數。
參考:劉江的Python教程
⑨ python 類方法和靜態方法的區別
類方法的第一個parameter是類自己,然後才是參數。而靜態方法是和類無關的,也不會自動導入類作為參數。可以說靜態方法只是一個和自己所在的類無關的一個方法。可以隨意你怎麼用這個方法。抽象點說靜態方法就是你在其他語言裡面用的普通方法,類方法是Java里的類方法一樣的。
⑩ python靜態方法和類方法的區別
classA:deffun_i(self,x):print(x)@classmethoddeffun_c(cls,x):print(x)@staticmethoddeffun_s(x):print(x)a=A()a.fun_i(1)a.fun_s(1)A.fun_c(1)A.fun_s(1)調用方式不同:類方法:應該通過類調用實例方法:應該通過實例調用靜態方法:既可以通過類調用,也可以通過實例調用實參和形參的定義和傳遞不同:靜態方法:聲明和調用時,都沒有隱含參數。實例方法:聲明時,要定義一個隱含參數:self。調用時,實例本身被隱含地傳遞給這個參數。類方法:聲明時,要定義一個隱含參數:cls。調用時,類本身被隱含地傳遞給這個參數。