什么是對(duì)類/什么是對(duì)象
1)官方定義
類就是擁有相等功能和相同的屬性的對(duì)象的集合 -- 抽象的
對(duì)象就是類的實(shí)例 -- 具體的
2)生活角度看類和對(duì)象
如果 人 是類, 具體的人就是對(duì)象
如果 電腦 是類, 我的筆記本就是對(duì)象
2.類的聲明
1)語法
class 類名:
類的內(nèi)容
2)說明
class -- 固定寫法,聲明類的關(guān)鍵字
類名 -- 標(biāo)識(shí)符,不能是關(guān)鍵字
見名知意,采用駝峰式命名(采用通過單詞首字母大寫的方式,來區(qū)分不同的單詞)
: -- 固定寫法
類的內(nèi)容 -- 主要包含:類的說明文檔刑枝、屬性(普通變量)、功能(函數(shù)/方法)
#聲明一個(gè)Person類
class Person:
"""
人類
"""
#=========屬性========
#=========方法========
def eat(self,food):
print(self,p1)
print(food)
#創(chuàng)建Person類的對(duì)象p1
p1 = Person()
p0 = p1
p1.eat('米飯')
3.對(duì)象怎么聲明
對(duì)象 = 類() -- 創(chuàng)建指定的類對(duì)應(yīng)的對(duì)象
4.類中的方法
a.什么是方法:聲明在類中的函數(shù) 就叫方法
b.類中的方法有三種:對(duì)象方法抵知、類方法芥喇、靜態(tài)方法
對(duì)象方法:直接聲明在類中的函數(shù);有默認(rèn)參數(shù)self,通過對(duì)象調(diào)用時(shí),self不需要傳參,系統(tǒng)會(huì)自動(dòng)把當(dāng)前對(duì)象傳給他;
(self,當(dāng)前對(duì)象 -- 誰調(diào)用,self就指向誰;當(dāng)前對(duì)象能做的事情,self都能做)
通過類的對(duì)象調(diào)用: 對(duì)象.對(duì)象方法()
=====================================================
類方法: 聲明函數(shù)前加@classmethod
有默認(rèn)參數(shù)cls:通過類調(diào)用的時(shí)候,該參數(shù)不用傳參;系統(tǒng)會(huì)自動(dòng)將當(dāng)前類傳遞給他
(cls,當(dāng)前類 -- 誰調(diào)用,cls就指向誰;當(dāng)前類能做的事情,cls都能做)
通過類來調(diào)用: 類.類方法()
@classmethod
def destroy(cls):
print('')
===================================================
靜態(tài)方法: 聲明函數(shù)前加@staticmethod
沒有默認(rèn)參數(shù)
通過類來調(diào)用: 類.靜態(tài)方法()
@staticmethod
def animal():
================類方法的調(diào)用==================
class Person1:
@classmethod
def destroy(cls):
print('aaa')
Person1.destroy()
=================靜態(tài)方法的調(diào)用================
class Person2:
@staticmethod
def animal():
print('aaa')
Person2.animal()
常識(shí):
什么是init方法
- init是類中默認(rèn)繼承的一個(gè)魔法方法,用來初始化類;本質(zhì)是對(duì)象方法,但是不需要通過對(duì)象調(diào)用,會(huì)自動(dòng)調(diào)用
- 通過類創(chuàng)建對(duì)象的時(shí)候(通過構(gòu)造方法創(chuàng)建對(duì)象),系統(tǒng)會(huì)自動(dòng)調(diào)用類用的init方法
- 創(chuàng)建對(duì)象的時(shí)候需不需要參數(shù),需要幾個(gè)參數(shù),看這個(gè)類的init方法
- 聲明類的時(shí)候,系統(tǒng)會(huì)自動(dòng)給我們創(chuàng)建一個(gè)函數(shù),這個(gè)函數(shù)名和聲明的類的類名一樣;
- 在函數(shù)中,會(huì)先在內(nèi)存中開辟空間創(chuàng)建對(duì)象,然后用創(chuàng)建的對(duì)象去調(diào)用類的init方法,最后才會(huì)將對(duì)象返回
class Person:
def __init__(self,name):
print('aaa')
print(name)
p1 = Person(name=123)
1屬性
- 類中的屬性分為:對(duì)象屬性;字段
1)字段 -- 直接什么在類中的變量;字段要通過'類.字段'的方式使用
當(dāng)屬性的值不會(huì)因?yàn)閷?duì)象不同而不同,這種屬性就可以聲明成類的字段
2)對(duì)象屬性:必須在init方法中,以'self.屬性 = 值'的形式聲明
當(dāng)屬性的值可能會(huì)因?yàn)閷?duì)象的不同而不同,使用對(duì)象屬性
對(duì)象屬性通過'對(duì)象.屬性'的方式來使用
class Dog:
#====字段====
numbers = 10
#=====對(duì)象屬性======
def __init__(self,color1='yellow',age1=1):
self.color = color1
self.age = age1
Dog.numbers = 100 #可以修改值
print(Dog.numbers)
dog1 = Dog()
print(dog1.color)
print(dog1.age)
dog2 = Dog('white')
print(dog2.color)
- 練習(xí):聲明一個(gè)學(xué)生類,擁有屬性:名字/電話/年齡/學(xué)號(hào)
- 擁有功能:學(xué)習(xí)(打印XXX在學(xué)XXX)
class Students:
def __init__(self,name1,tel1='',age1=0):
self.name = name1
self.tel = tel1
self.age = age1
self.id = '0000'
def study(self,subject):
print('%s在學(xué)%s'%(self.name,subject))
student1 = Students('小明')
student1.study('python')
注意,聲明 類 時(shí)方法的選擇
1.對(duì)象方法:實(shí)現(xiàn)函數(shù)的功能,需要對(duì)象屬性時(shí)
2.類方法:實(shí)現(xiàn)函數(shù)的功能,不需要對(duì)象屬性,但是需要類相關(guān)的操作時(shí)
3.靜態(tài)方法:實(shí)現(xiàn)函數(shù)的功能既不需要對(duì)象屬性,也不需要類的相關(guān)操作
class jx:
def __init__(self,long,weith):
self.long = long
self.weith = weith
def mj(self):
mj = self.long*self.weith
zc = 2*self.long+2*self.weith
return mj,zc
jx1 = jx(3,4)
print(jx1.mj())
1.python中對(duì)象的屬性可變(支持增/刪/改/查)
a.查
class Dog:
def __init__(self,name):
self.name = name
self.age = 0
dog1 = Dog('大黃')
dog2 = Dog('小白')
方法一:
對(duì)象.屬性 -- 獲取指定屬性對(duì)應(yīng)的值,如果屬性不存在報(bào)錯(cuò)
AttributeError
print(dog1.name)
方法二:
getattr(對(duì)象,屬性名,默認(rèn)值) -- 獲取指定對(duì)象指定屬性的值,如果屬性不存在,返回默認(rèn)值(默認(rèn)值可以不寫,不存在時(shí)報(bào)錯(cuò))
print(getattr(dog1,'name'))
print(dog1.name)
print(getattr(dog1,'name'))
print(getattr(dog1,'name2','默認(rèn)值'))
b.增/改 -- 屬性存在修改,不存在就增加
方法一:
對(duì)象.屬性 = 值 -- 屬性不存在增加屬性,屬性存在就修改屬性的值
方法二:
setattr(對(duì)象,屬性名,值)
dog1.name = '花花'
print(dog1.name)
setattr(dog2,'gender','雄性')
print(dog2.gender)
c.刪
del 對(duì)象.屬性
delattr(對(duì)象,屬性)
# del dog1.name
print(dog1.name)