1、理論上的定義:
類:就是擁有相同功能和屬性的對(duì)象的集合池摧。(抽象)
對(duì)象:類的實(shí)例(具體)
2焦除、從生活角度
如果說人這個(gè)物種是一個(gè)類,那么每一個(gè)人就是一個(gè)對(duì)象作彤。
3踢京、編程方式
面向過程編程:以算法為工具
函數(shù)式編程:以函數(shù)為工具
面向?qū)ο缶幊蹋阂灶惡蛯?duì)象為工具(面向生活)
類:對(duì)擁有相同功能(方法)和相同屬性的封裝。
封裝效果:一個(gè)類中可以對(duì)多個(gè)功能進(jìn)行封裝(多個(gè)函數(shù))宦棺;封裝多個(gè)屬性
一瓣距、類的聲明格式
class 類名(父類列表):
"""類的說明文檔"""
類的內(nèi)容
class:聲明類的關(guān)鍵字。
類名:標(biāo)識(shí)符代咸,不能是關(guān)鍵字蹈丸。首字母必須大寫!采用駝峰式命名呐芥。例如:StudentSystem逻杖。
(駝峰式命名:第一個(gè)單詞首字母小寫,其他單詞的首字母大寫)
父類列表:這個(gè)部分可以省思瘟。這是一個(gè)繼承語(yǔ)法荸百,可以多繼承。
類的內(nèi)容:類的方法和屬性滨攻。
二够话、類中的方法
調(diào)用方式:對(duì)象.函數(shù)名()
方法:就是聲明在類中的函數(shù)
方法分類:對(duì)象方法蓝翰,類方法,靜態(tài)方法女嘲。
直接寫在類中的方法畜份,自帶一個(gè) self 參數(shù)
對(duì)象方法:通過對(duì)象來調(diào)用。
三欣尼、構(gòu)造方法
- 構(gòu)造方法:系統(tǒng)自動(dòng)創(chuàng)建爆雹,方法名和類名一樣。用來創(chuàng)建對(duì)象愕鼓。
- _init_:方法的功能是用來做初始化和添加對(duì)象屬性钙态。
- 當(dāng)我們通過構(gòu)造方法去創(chuàng)建對(duì)象的時(shí)候,系統(tǒng)會(huì)自動(dòng)調(diào)用init方法菇晃。
- 如果類的 init 方法有參數(shù)册倒,通過給構(gòu)造方法傳參。
四谋旦、創(chuàng)建對(duì)象
創(chuàng)建類的時(shí)候剩失,系統(tǒng)會(huì)默認(rèn)創(chuàng)建這個(gè)類對(duì)應(yīng)的構(gòu)造方法(方法名和類名相同)。一個(gè)類可以有多個(gè)對(duì)象册着,只要調(diào)用構(gòu)造方法拴孤,就會(huì)產(chǎn)生新的對(duì)象。
- 構(gòu)造方法:類名() --> 創(chuàng)建類對(duì)應(yīng)的對(duì)象
- 通過對(duì)象調(diào)用對(duì)象方法甲捏,默認(rèn)參數(shù) self 不需要傳參演熟。
- 創(chuàng)建對(duì)象的過程:調(diào)用構(gòu)造方法在內(nèi)存中開辟空間創(chuàng)建一個(gè)對(duì)象,然后用新建的這個(gè)對(duì)象去調(diào)用 init 方法來初始化對(duì)象的屬性司顿,最后才將對(duì)象返回芒粹。
class Person:
"""
人類
"""
def eat(self):
print('人吃飯')
#創(chuàng)建Person類的對(duì)象,并且將對(duì)象的地址存到 p1中
p1 = Person()
p1.eat()
五大溜、對(duì)象屬性
1化漆、屬性
對(duì)象的屬性:不同的對(duì)象,對(duì)應(yīng)的值可能不一樣钦奋,這樣的屬性是對(duì)象屬性座云。屬于對(duì)象類中的對(duì)象屬性是聲明在 init 方法中的。
- 聲明格式是:self . 屬性名 = 初始值
- 對(duì)象的使用:對(duì)象 . 屬性名
方法一
class Student:
"""學(xué)生類"""
def __init__(self):
#聲明對(duì)象的屬性name付材,age朦拖,id
self.name = '張三'
self.age = 0
self.id = '001'
stu1 = Student()
print(stu1.name,stu1.age,stu1.id)
#通過對(duì)象去修改對(duì)象的屬性
stu1.name = '星辰'
print(stu1.name)
方法二
class Dog:
"""狗類"""
def __init__(self, type1, color1):
self.type = type1
self.color = color1
dog1 = Dog('土狗','黃色')
print(dog1.type, dog1.color)
方法三
class Computer:
"""電腦類"""
def __init__(self, color='白色', memory=0):
self.color = color
self.memory = memory
com1 = Computer()
print(com1.color,com1.memory)
類的字段(屬性):屬于類,所有對(duì)象對(duì)應(yīng)的值是一樣的厌衔。
2璧帝、屬性的增刪改查
python是動(dòng)態(tài)語(yǔ)言,python中類的對(duì)象的屬性可以進(jìn)行增刪改查的操作富寿。
-
查
方法一:對(duì)象.屬性名(常用)
方法二:getattr(對(duì)象, 屬性名, default=None)
屬性不存在可以通過設(shè)置默認(rèn)值睬隶,讓程序不崩潰锣夹,并且返回默認(rèn)值。
方法三:對(duì)象._getattribute_(屬性名) -
改
方法一:對(duì)象.屬性 = 新值(常用)
方法二:setattr(對(duì)象理疙, 屬性名晕城,值)
方法三:對(duì)象._setattr_(屬性名泞坦,值) -
增
方法一:對(duì)象.屬性 = 新值(屬性不存在窖贤,就是添加)
方法二:setattr(對(duì)象, 屬性名贰锁,值)
方法三:對(duì)象._setattr_(屬性名赃梧,值) -
刪
方法一:del 對(duì)象.屬性
方法二:delattr(對(duì)象,屬性)
方法三:對(duì)象. _delattr_(屬性)
六豌熄、類的屬性(字段)
1授嘀、類的字段:就是聲明在類的里面,方法的外面的變量
class Person:
#這個(gè)number就是類的字段
number = 6
2锣险、什么時(shí)候聲明類的屬性:
屬于類蹄皱,并且對(duì)于類的所有對(duì)象來說是共有的。
3芯肤、怎么使用
print(Person.number)
七巷折、對(duì)象方法
- 直接聲明在類中的函數(shù)默認(rèn)是對(duì)象方法,有一個(gè)默認(rèn)參數(shù) self
- 對(duì)象方法要通過對(duì)象來調(diào)用:對(duì)象.對(duì)象方法
- 對(duì)象方法中默認(rèn)參數(shù) self 崖咨, 不需要傳參锻拘。因?yàn)樵谡{(diào)用這個(gè)方法時(shí),系統(tǒng)自動(dòng)當(dāng)當(dāng)前對(duì)象傳給 self 击蹲。
- 哪個(gè)對(duì)象調(diào)用署拟,self 就指向誰(shuí)。對(duì)象能做的事情歌豺,self 也能做推穷,本質(zhì)上是一樣的
練習(xí):
# 1、寫一個(gè)矩形類类咧,有屬性長(zhǎng)和寬,功能:求周長(zhǎng)和面積
class Rect:
def __init__(self, width, weight):
self.width = width
self.weight = weight
def perimeter(self):
print('周長(zhǎng)是:',(self.weight + self.width)*2)
def area(self):
print('面積是:',(self.width*self.weight))
rect1 = Rect(3,4)
rect1.perimeter()
rect1.area()
周長(zhǎng)是: 14
面積是: 12
#2馒铃、寫一個(gè)班級(jí)類,班級(jí)里面有多個(gè)學(xué)生的成績(jī)轮听,可以獲取成績(jī)的最高分
class Class_python:
def __init__(self,*score):
self.score = score
def score_max(self):
a = list(self.score)
a.sort()
print('最高分是:%d'%a[-1])
class1 = Class_python(2,3,4,5,23,43,32,)
class1.score_max()
最高分是:43
八骗露、類的方法
聲明形式:聲明方法前需要使用@classmethod說明。
特點(diǎn):自帶一個(gè)默認(rèn)參數(shù) cls血巍,這個(gè)參數(shù)調(diào)用的時(shí)候不需要傳值萧锉。系統(tǒng)自動(dòng)傳值,誰(shuí)調(diào)用指向誰(shuí)述寡。(因?yàn)橹荒鼙活愓{(diào)用柿隙,所以始終指向當(dāng)前類)
調(diào)用:通過類來調(diào)用 --> 類.類方法()
class Class1:
#聲明一個(gè)對(duì)象方法
def class2(self):
print('這是一個(gè)對(duì)象方法')
#聲明一個(gè)類方法
@classmethod
def class_func(cls):
print('這是一個(gè)類方法')
九叶洞、靜態(tài)方法
聲明形式:聲明方法前需要使用@staticmethod說明。
特點(diǎn):沒有默認(rèn)參數(shù)
調(diào)用:通過當(dāng)前類調(diào)用 --> 類.靜態(tài)方法()
@staticmethod
def static_func():
print('這是一個(gè)靜態(tài)方法')
調(diào)用
c1 = Class1()
c1.static_func()
十禀崖、怎么選擇三種方法
a衩辟、只要實(shí)現(xiàn)方法的功能需要用到對(duì)象的屬性,我們就使用對(duì)象方法波附;否則就使用靜態(tài)方法或者類方法艺晴。
b、不使用對(duì)象方法的前提下掸屡,如果實(shí)現(xiàn)功能需要用到類的字段封寞,就用類方法。
c仅财、實(shí)現(xiàn)功能既不需要對(duì)象的屬性狈究,又不需要類的字段,就使用靜態(tài)方法盏求。
注意:靜態(tài)方法和類方法劃分不用那么嚴(yán)格抖锥,因?yàn)殪o態(tài)方法能做的,類方法也能使用碎罚;反之亦然磅废。