1.什么是類犯戏,什么是對象
類就是擁有相同功能和相同屬性的對象的集合椒涯;類是抽象的
對象就是類的實例垂蜗;對象是具體的
人是類 伟墙,余婷就是人類的對象
車是類 =樓下停的那輛車
2.類的聲明
類中的內(nèi)容包含:功能(函數(shù))和(變量/屬性)
a.語法
class 類名(父類):
類的內(nèi)容
b.說明
class -Python聲明的關(guān)鍵字
類名 -要求:標識符钾恢,不能是關(guān)鍵字
規(guī)范:駝峰式命名(通過首字母大寫來區(qū)分不同的單詞瓤介,類的首字母必須大寫)
類的內(nèi)容 ——包含類的方法吕喘,屬性和說明文檔
方法就是在類中的函數(shù)
屬性就是變量聲明在類中的變量
3.對象的聲明
語法:
類名() --創(chuàng)建指定的類和對象并且返回
class Person:
'''
類的聲明
'''
num =1 #類的屬性
def eat(self): #類中的方法
print('恰飯')
# 創(chuàng)建person類對象;p1就是對象
p1 = Person()
#同一個類可以創(chuàng)建多個對象
p2 = Person()
def main():
pass
if __name__ == '__main__':
main()
class 類名:
類中的屬性
類中的方法
1.類中的方法
聲明在類中的函數(shù)就是方法
類中的方法包括:對象方法(實例方法)刑桑、類方法氯质、靜態(tài)方法
2.對象方法:
a.直接聲明在類中的方法就是對象方法
有默認參數(shù)self
通過'對象.方法()'的方式來調(diào)用
b.參數(shù)self
當我們通過對象調(diào)用對象方法時,self不需要傳參祠斧,因為系統(tǒng)會將當前對象傳給self
當前對象:調(diào)用當前方法的對象(誰調(diào)用對象方法self就指向誰)
注意:當前類的對象能做的事情self都能做
'''
class Person:
'''
類的聲明
'''
num =1 #類的屬性
def eat(self,food): #類中的方法
print('恰飯')
print('zlp吃%s'%food)
return '真香闻察!'
創(chuàng)建person類對象;p1就是對象
p1 = Person()
print(p1.eat('屎'))
def main():
pass
if __name__ == '__main__':
main()
1.init方法init
init方法是類中一個特殊的對象方法琢锋,專門用來對創(chuàng)建的對象進行初始化的方法辕漂。
當通過類創(chuàng)建對象的時候,系統(tǒng)就會自動調(diào)用init方法
函數(shù)名和類名一樣的函數(shù)就是構(gòu)造方法吴超,專門用來創(chuàng)建對象
Python中聲明類的時候钉嘹,系統(tǒng)還會自動創(chuàng)建這個類對應(yīng)的構(gòu)造方法
當我們構(gòu)造方法的時候,內(nèi)部會先在內(nèi)存中開辟空間保存對象鲸阻;然后用創(chuàng)建的這個對象去調(diào)用init方法跋涣,用來對對象進行初始化;
init方法調(diào)用結(jié)束后鸟悴,返回對象
注意:如果類的init除了self以外還有其他參數(shù)陈辱,那么我們在創(chuàng)建對象的時候需要通過構(gòu)造方法給init方法傳參
def Person(x,y):
對象 = 創(chuàng)建對象
對象.init(x,y)
return 對象
class Person:
# 類中__開頭并且以__結(jié)尾的方法叫魔法方法细诸。不需要主動調(diào)用沛贪,系統(tǒng)會自動調(diào)用
def __init__(self):
print('init被調(diào)用了')
def main():
p1 = Person()
if __name__ == '__main__':
main()
""" author = 王果"""
'''
1.什么是對象屬性
類中的屬性分為類的字段和對象屬性
a.對象屬性 --屬性的值會因為對象的不同而不同,這種屬性就應(yīng)該聲明為對象屬性
聲明在init方法中
以'self.屬性 = 值'的方式來聲明 這的屬性就是對象屬性 ————方式
通過'對象.屬性'的方式來使用 --使用
b.類的字段 --屬性的值不會因為對象的不同而不同震贵,這種屬性就聲明成類聲明
直接聲明類的里面利赋,函數(shù)的外面的變量就是類的字段
以'字段名' = '值'
通過'類.字段'的方式來使用
'''
class Person():
# 在init方法中聲明對象屬性
def init(self, name, age):
self.name = name
self.age = age
p1 = Person('zzz', 12)
print(p1.name, p1.age)
print(type(p1))
創(chuàng)建dog類,有屬性名字猩系、類型媚送、年齡
要求創(chuàng)建的對象時候不能給年齡賦值,可以給類型賦值也可不蝙眶,必須給名字賦值
對象方法eat:打印XXX在吃什么
class Dog():
def __init__(self, name, tpe='tu'):
self.age = 1
self.name = name
self.tpe = tpe
def eat(self, food):
print('%s在吃%s' % (self.name, food))
p1 = Dog('zlp', '土狗')
p1.eat('屎')
print(p1.age, p1.name, p1.tpe)
練習:聲明矩形,擁有長和寬褪那,擁有方法求面積和求周長
class rectangle():
def __init__(self,lenth,wide):
self.lenth = lenth
self.wide = wide
def area(self):
return self.wide*self.lenth
def peri(self,):
return (self.lenth+self.wide)*2
q1 = rectangle(5,4)
print(q1.area())
print(q1.peri())
def main():
pass
if __name__ == '__main__':
main()
python中的屬性支持增刪改查
class Person:
def __init__(self,name='',age=0,sex='女'):
self.name =name
self.age =age
self.sex =sex
p1 = Person('曾令鵬')
p2 = Person('雇傭兵')
一幽纷、查:
1.對象.屬性 -獲取指定對象指定屬性;當屬性不存在時候會報錯博敬!
2.getattr(對象,屬性:str友浸,默認值) -獲取指定對象指定屬性值,當屬性不存在時會拿默認值
'''
print(getattr(p1,'age','asasa'))#屬性不存在的時候可以使用getattr
二偏窝、增收恢、改
'''
對象.屬性 = 值 -當屬性存在的時候修改屬性的值武学;屬性不存在就增加屬性值
setattr(對象, 屬性名, 值) - 當屬性存在的是修改屬性的值;屬性不存在的時候添加屬性s
'''
p1.name = 'asasasasaasa'
p1.lenth = '177'
print(p1.name,p1.lenth)
三伦意、刪
'''
del 對象.屬性
delattr (對象火窒,屬性名)
注意:對象屬性額操作,只針對操作的那一個對象驮肉,不會影響其他屬性
del p1.lenth
delattr(p1,'name')
class Dog:
'__slots魔法'
__slots__ = ('name','color')#魔法方法熏矿,限制屬性的個數(shù),只能比slots里的少离钝,不能多
def __init__(self,name='',color='黑色'):
self.name = name
self.name = color
內(nèi)置屬性:指的是我們創(chuàng)建的時候系統(tǒng)自動給我們添加的屬性(其實是通過繼承獲取到的)
class Person:
類的字段
num =23
對象屬性
__slots__ = ('name','age','sex')
def __init__(self,name='',age=0,sex='男'):
self.name =name
self.age =age
self.sex= sex
def __repr__(self):
return '<' + str(self.__dict__)[1:-1]+ 'at ' +hex(id(self))+'>'
p1 = Person('小明',32,'男')
#1.__name__ 獲取類的名字票编,打印的是字符串
print(Person.__name__,str(Person.__name__))
#2.__class__ -獲取對象對應(yīng)的類(結(jié)果是類)
my_class = p1.__class__
print(my_class)
#3.__doc__ -獲取類的說明文檔
print(Person.__doc__)
# 4.對象.__dict__
''' 注意:當用slort方法賦值后,對象的__dict__方法失效'''
print(p1.__dict__)
#5.類.__module__ -獲取當前類所在的模塊的模塊名
print(Person.__module__)
#6.類.__bass__ -獲取當前類的父親(元組)
print(Person.__bases__)
#7.定制對象的打印格式(當我們通過print打印一個對象的時候卵渴,實質(zhì)就是打印對象對象調(diào)用__repr__函數(shù)的返回值)
#這個函數(shù)的返回值必須是字符串
print(p1)
1.對象方法:
a.怎么聲明:直接聲明在類型
b.特點:自帶self參數(shù)慧域,調(diào)用的時候不用傳參,誰調(diào)用指向誰
c.怎么調(diào)用:對象浪读,方法()
2.類方法
a.怎么聲明:聲明函數(shù)前加@classmethod
b.特點:自帶默認參數(shù)cls昔榴;調(diào)用的時候不用傳參,系統(tǒng)會自動將當前函數(shù)的類傳給它(誰調(diào)用指向誰)
c.怎么調(diào)用:通過類來調(diào)用瑟啃,類.方法()
d.對象方法能用的方法论泛,類方法都能用
3.靜態(tài)方法
a.怎么聲明:聲明函數(shù)前加@staticmethod
b.特點:沒有默認參數(shù)
c.怎么調(diào)用:通過類來調(diào)用,類.方法
4.在類中怎么選擇使用哪種方法:
如果實現(xiàn)類中的函數(shù)的功能需要使用對象的屬性蛹屿,那么這個函數(shù)就要聲明對象方法屁奏。
實現(xiàn)函數(shù)的功能不需要對象的屬性的前提下,如果需要類的字段错负,就聲明類方法
實現(xiàn)函數(shù)的功能既不需要對象屬性也不需要類的字段就聲明靜態(tài)方法
class Person:
@staticmethod
def func3():
print('我是靜態(tài)方法')
@classmethod
def func2(cls):
print('我是類方法2')
@classmethod
def func1(cls):
p1 = cls()
print(p1)
cls.func2()
Person.func1()
Person.func3()
def main():
pass
if __name__ == '__main__':
main()