pythonclassinit
❶ python class用法理解
python中class用法是什麼呢?不知道的小夥伴來看看小編今天的分享吧!
1、class的定義及常用稱呼:
類(Class): 用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。
對象:它是類的實例化。
方法:指類中定義的函數。
2、類對象支持兩種操作:
屬性引用和實例化。
屬性引用的語法:obj.屬性
類實例化的語法:obj = 類名()
類中方法的調用:obj.方法名()
3、舉例:
例1
class student(object): #自定義一個類student
def speak(self): ## 哪個對象調用了這個方法,self就是那個對象;可以把self理解為一個形參
print(%s 說:我今年%s歲 % (self.name, self.age))
john = student() #類student 實例化一個對象john
john.name = 約翰 # 給對象添加屬性
john.age = 19
john.speak() # 調用類中的 speak()方法
此時的輸出為
約翰 說:我今年19歲
例2
class student(object): # 定義構造方法 有init,有別於自定義類
def __init__(self, n, a): #__init__() 是類的初始化方法;它在類的實例化操作後 會自動調用,不需要手動調用;
self.name = n
self.age = a # 設置屬性
def speak(self): # 定義類中的普通方法
print(%s 說:我今年%s歲 % (self.name, self.age))
john = student(約翰,19) #類student 實例化一個對象john
john.speak() # 調用類中的 speak()方法
最後的輸出同上個例子
在python中使用__開頭 並以__結尾的方法,稱之為魔法方法;
init(self) 是類的初始化方法,也稱構造方法,是一種特殊的魔法方法; init(self)在實例化後,會自動調用,而不用手動調用,所以一般把屬性設置在_init__()里;
常用到的魔法方法還有:str(self) 、 del(self)等。
4、類的繼承以及super,self的使用:
子類繼承父類,即子類擁有了父類的屬性和方法。
python中類的初始化都是__init__()。所以父類和子類的初始化方式都是__init__()
但是如果子類初始化時沒有這個函數,那麼它便調用父類的__init__();(對應例input1)
如果子類種調用了父類的init,但自己又定義了自己的init,那麼就會覆蓋父類的初始化函數,只顯示子類自己的初始化。(對應例input2)
input1:
class Animal(object):
def __init__(self):
self.name = 我是父類
class Panda(Animal):
def __init__(self):
super().__init__() #使用super的方式來顯示調用父類的__init__()函數
super(Panda, self).__init__() # 第二種super初始化的方式
if __name__==__main__:
panda = Panda() #實例化Panda
print(panda.name)
output1:
我是父類
input2:
class Animal(object):
def __init__(self):
self.name = 我是父類
class Panda(Animal):
def __init__(self):
super().__init__()
self.name = panda
if __name__==__main__:
panda = Panda()
print(panda.name)
output2:
panda
2. self和super的區別:
(1) self是首先調用自身的方法如果自身沒有再去父類中找;super是直接從父類中找方法
(2)self是類(可以理解為形參),super是預編譯指令
反正要繼承父類,直接上super就ok了
input3:
class Animal(object):
def __init__(self):
self.name = 我是父類
def A(self): #父類中的A方法
print(父類的A方法)
class Panda(Animal):
def __init__(self):
super().__init__()
self.myname = panda
def A(self): #子類中的A方法
print(子類的A方法)
def B(self):
self.A() #self調用A
super().A() #super調用A
if __name__==__main__:
panda = Panda()
panda.B() #通過B函數來調用A方法,查看self和super的區別
output3:
子類的A方法#我們說過self是先從自身找方法,沒有再去父類找
父類的A方法#而super則是直接從父類中找
❷ python關於class的問題
對象構造後第一個調用的函數,在python裡面實例的屬性是可以動態構建的,在類裡面定義的屬性是類屬性,不是實例屬性,定義實例自己的屬性的最好地方是__init__函數裡面。
比如
class TEST():
class_attr #類屬性,通過TEST.class_attr調用,如果用instance.class_attr調用實際上是聲明類另一個實例屬性,與之前的TEST.class_attr不是一個東西了
def __init__(self,other):
self.class_attr #實例屬性,與之前的那個屬性處於不同的名字空間了,不是一個東西。
self.other=other
總之,__init__可以用來聲明實例屬性,以及進行必要的初始化。
希望能解決您的問題。
❸ python class的問題
這個程序沒有遵從python的慣例,所以可能對你的理解產生一些問題。
__init__(b, c)和d(b)是class A的方法,按照慣例,第一個參數應該寫為self,因為類在調用它的方法的時候會自動把實例作為第一個參數傳到它的方法。所以,第一個參數b,其實調用時候的class A的實例。
b.c = c,其實就是給當前實例添加一個屬性c,c就是傳進來的參數
同理,d()函數的第一個參數當然可以是其他,只是代表當前實例而已
for循環中它是循環初始化時傳進來的參數,因為在初始化時把該參數記錄到了屬性c中,所以是b.c
所以,class A改寫為如下代碼,可能你就明白了
classA(object):
def__init__(self,c):
self.c=c
defd(self):
foreinself.c:
printe
第九行就是為了獲得class A的實例,所以傳入初始化參數['一', '二', '三', '四']來初始化以獲得實例
因為之前說過了,class中的方法第一個參數是會自動傳入為當前實例,所以調用時第一個參數是不需要傳的,因此調用d()函數時,不需要帶參數
這個程序只是定義了一個類A,它初始化是需要傳入參數c,並且參數c是可以循環的。類A提供了方法d,用來列印參數c的內容
之後的幾行代碼只是實例化了類A,並進行了方法調用而已