Python:類
阿新 • • 發佈:2018-11-06
類
定義方法:
class類名:
...
類也是物件,它是能建立例項的物件
類變數
類變數是類的屬性,此屬性屬於類,不屬於此類的例項
作用:
通常用來儲存該類建立的物件的共有屬性
說明:
類變數可以通過該類直接訪問
類變數可以通過類的例項直接訪問(取值)
類變數可以通過此類的物件__class__屬性間接訪問
class human: total_count=0 #建立一個類變數 print('human.total=',human.total_count) human.total_count+=100 print(human.total_count) #100 human.class_var=200#建立第二個類變數 print(dir(human))
class human:
total_count=0 #建立一個類變數
h1=human()#建立一個例項
print(h1.total_count)#0 h1沒有屬性訪問類變數
h1.total_count=100 #建立例項變數
print(h1.total_count)#100
class human: total_count=0 #建立一個類變數 def __init__(self): self.__class__.total_count+=1 h1=human()#建立一個例項 l=[] l.append(human()) l.append(human()) l.append(human) print(human.total_count,'個物件')#3
例項方法和類方法都是類的變數(類變數)
類的文件字串:
類內第一個沒有賦值給任何變數的字串為類的文件字串
類的文件字串繫結在類的__doc__屬性上
示例:
class dog:
'''dog類的文件字串'''
def infos(self):
'''這是dog類內infos方法的文件字串'''
>>>help(dog)
>>>print(dog.__doc__)
類的__slots__列表:
作用: 限定一個類建立的例項只能在固定的屬性(實際變數) 不允許物件新增此列表以外的例項屬性 訪問使用者因錯寫屬性名而發生程式錯誤 說明: __slots__屬性是一個列表,列表的值是字串 含有__slots__屬性的類所建立的例項物件沒有 __dict__屬性,即此例項不用字典來儲存例項屬性 # class human: # def __init__(self,n,a): # self.name=n # self.age=a # def show__info(self): # print(self.name,'今年',self.age,'歲') # h1=human('tarena',15) # h1.show__info() #15歲 # h1.Age=16 #大寫Age # h1.show__info()#15歲 # print(h1.__dict__)#{'name': 'tarena', 'age': 15, 'Age': 16} class human: #此__slots__列表讓human建立的物件只允許有name和age屬性 __slots__={'name','age'}#############__slots__ def __init__(self,n,a): self.name=n self.age=a def show__info(self): print(self.name,'今年',self.age,'歲') h1=human('tarena',15) h1.show__info() #15歲 # h1.Age=16 #此處報錯,因為此屬性不在__slots__列表內 h1.show__info()#15歲
類方法@classmethod
類方法是用於描述類的行為的放法,此方法屬於類,不屬於該類建立的物件
說明:
1.類方法需要使用@classmethod裝飾器定義
2.類方法至少有一個形參,第一個形參用於繫結類,約定寫為‘cls’
3.類和該類的例項都可以呼叫類方法
4.類方法不能訪問此類建立的物件的例項屬性
class a:
v=100 #類變數
@classmethod
def get_v(cls): #cls-->class
'''這是一個類方法,用來獲取類變數v的值'''
return cls.v
@classmethod
def set_v(cls,b):
cls.v=b
print(a.get_v())#100獲取類變數v的值
a.set_v(200)
print(a.get_v())#200
A=a()
#類和該類的例項都可以呼叫類方法
print(A.get_v())# 200 該類的例項可以呼叫類方法
靜態方法@staticmethod
靜態方法是定義在類內的函式,此函式的作用域是類的內部
說明:
靜態方法需要使用@staticmethod裝飾器定義
2.靜態方法與普通函式定義相同,不需要傳入self和cls引數
3.靜態方法只能憑藉該類或類的例項呼叫
4.靜態方法不能訪問類變數和例項變數
**#此例項示意靜態方法的定義的使用**
class A:
@staticmethod
def myadd(a,b):
return a+b
print(A.myadd(100,200))# 300呼叫靜態方法
a=A()
print(a.myadd(30,40)) #70
函式,靜態方法,類方法,例項方法
共性:
語句塊,實現相應的功能