python面向?qū)ο蠡A(chǔ)

一、引入

面向過程編程(窮人的思想) :一遇到問題馬上想到的是怎么寫代碼把這個(gè)功能實(shí)現(xiàn)(邏輯)
函數(shù)式編程(小資的思想) :一遇到問題馬上想到有沒有一個(gè)函數(shù)已經(jīng)把這個(gè)功能實(shí)現(xiàn)了,如果有就拿過來用,沒有就定義一個(gè)有這個(gè)功能的函數(shù)(函數(shù))
面向?qū)ο缶幊?富豪的思想) :一遇到問題馬上想到有沒有一個(gè)類中有這個(gè)方法能夠把這個(gè)功能實(shí)現(xiàn),如果沒有就創(chuàng)建這個(gè)類(類和對(duì)象)

a = 10
b = 20
# 求變量a和b的和
print(a + b)

二、類和對(duì)象

1.什么是類、什么是對(duì)象

類就是擁有 相同屬性相同功能對(duì)象的集合(抽象)
對(duì)象就是類的實(shí)例(具體)

從生活的角度:
如果人是類, 余婷就是對(duì)象,駱老師是另一個(gè)對(duì)象
如果杯子是類,我桌上的這個(gè)杯子就是對(duì)象

2.定義類(說清楚共同屬性和功能是哪些)

語法:
class 類名:
????????類的說明文檔
????????類的內(nèi)容(包含屬性和方法)

說明:
class - 關(guān)鍵字
類名 - 程序員自己命名
????????要求:標(biāo)識(shí)符,不能是關(guān)鍵字
????????規(guī)范:駝峰式命名,并且首字母大寫;見名知義;不適用系統(tǒng)的函數(shù)名、類名、模塊名
類的說明文檔 - 用""""""引起來的說明性文字,主要說清楚類提供了哪些屬性和哪些功能
類的內(nèi)容 - 主要包含屬性和方法(定義在類中的函數(shù)叫方法)

# PEP8命名規(guī)范
student_name = '張三'
# 駝峰式命名
studentName = '李四'


# 定義一個(gè)人類
class Human:
    """人類"""
    def eat(self):
        print('人類在吃飯')

    def sleep(self):
        print('人類睡覺!')


class Servant:
    """傭人類"""
    def wash(self):
        print('洗衣服')

    def cook(self, food):
        print(f'做{food}')

3.定義對(duì)象(創(chuàng)建對(duì)象)

語法:
類名()

說明:
類名 - 是已經(jīng)定義好的類的類名

p1 = Human()    # 創(chuàng)建人類的對(duì)象p1
p2 = Human()
print(p1)
print(p2)

s1 = Servant()  # 創(chuàng)建傭人類的對(duì)象s1
print(s1)
s2 = Servant()

s1.wash()
s2.wash()
s1.cook('面條')
s2.cook('包子')

三、方法

1.方法(定義在類中函數(shù))

類中的方法分為三種:對(duì)象方法、類方法、靜態(tài)方法

1)對(duì)象方法
怎么定義:直接定義在類中函數(shù)就是對(duì)象方法
特點(diǎn):自帶參數(shù)self(self在通過對(duì)象調(diào)用的時(shí)候不用傳參, 系統(tǒng)會(huì)自動(dòng)將當(dāng)前對(duì)象傳給self),誰調(diào)用指向誰
怎么調(diào)用:用對(duì)象去調(diào)用(對(duì)象.方法名())

2)類方法
怎么定義: 定義函數(shù)前加裝飾器 @classmethod
特點(diǎn):自帶參數(shù)cls(cls在通過類調(diào)用的時(shí)候不用傳參,系統(tǒng)會(huì)自動(dòng)將當(dāng)前類傳給cls)
怎么調(diào)用:用類調(diào)用(類.方法名())

3)靜態(tài)方法
怎么定義: 定義函數(shù)前加裝飾器 @staticmethod
特點(diǎn):沒有默認(rèn)參數(shù)
怎么調(diào)用:用類調(diào)用

4)對(duì)象方法、類方法和靜態(tài)方法怎么選:
如果實(shí)現(xiàn)函數(shù)的功能需要用到對(duì)象的屬性,就選對(duì)象方法

class Dog:
    # eat是對(duì)象方法
    def eat(self):
        # self = dog1
        print(f'self:{self}')
        print('狗啃骨頭')

    # count是類方法
    @classmethod
    def count(cls):
        # Dog能做的cls都能做
        print(f'cls:{cls}')
        dog2 = Dog()
        dog3 = cls()
        print(dog2, dog3)
        print('狗的數(shù)量是: 100')

    @classmethod
    def func(cls):
        print('類方法')

    #  func2是靜態(tài)方法
    @staticmethod
    def func2():
        print('靜態(tài)方法')


# 創(chuàng)建對(duì)象
dog1 = Dog()
print(f'dog1:{dog1}')

# 用對(duì)象調(diào)用對(duì)象方法
dog1.eat()

# 用類調(diào)用類方法
Dog.count()

# 用類調(diào)用靜態(tài)方法
Dog.func2()

print('=========================注意:======================')
# 從本質(zhì)上講,類中的所有的方法都可以用對(duì)象和類調(diào)用,但是不能這么做
Dog.eat(12)    # 如果用類調(diào)用對(duì)象方法,self就會(huì)變成普通的參數(shù),沒有存在的價(jià)值

dog1 = Dog()
dog1.count()   # 用對(duì)象調(diào)用類方法的時(shí)候cls指向的還是類(不會(huì)指向?qū)ο?

dog1.func2()
Dog.func2()

四、init方法

1.構(gòu)造方法

構(gòu)造方法: 函數(shù)名和類名是一樣的,用來創(chuàng)建對(duì)象的方法就是構(gòu)造方法(Python中的構(gòu)造方法,在定義類的時(shí)候系統(tǒng)已經(jīng)自動(dòng)創(chuàng)建好了)

2.init方法

init方法又叫初始化方法,用來在創(chuàng)建對(duì)象的是對(duì)對(duì)象進(jìn)行初始化操作的。
當(dāng)我們通過類創(chuàng)建對(duì)象的時(shí)候,系統(tǒng)會(huì)自動(dòng)調(diào)用init方法來對(duì)象創(chuàng)建出來的對(duì)象進(jìn)行初始化。

調(diào)用構(gòu)造方法創(chuàng)建對(duì)象的時(shí)候需不需要參數(shù),需要幾個(gè),看被自動(dòng)調(diào)用的init

class Person:
    def __init__(self, a, b):
        print('初始化方法:', a, b)
        print(f'self:{self}')


p1 = Person(10, 20)
print(p1)

# p2 = Person(a=100, b=200)
# p2 = Person()
"""
def Person(*args, **kwargs):
    對(duì)象 = 申請(qǐng)空間創(chuàng)建對(duì)象
    對(duì)象.__init__(*args, **kwargs)
    return 對(duì)象
"""

五、對(duì)象屬性

1.屬性: 對(duì)象屬性和類屬性

對(duì)象屬性: 對(duì)象屬性的值會(huì)因?yàn)閷?duì)象不同而不一樣
a.定義在init方法中
b.以 self.屬性名 = 值
c.通過 對(duì)象.屬性名 的方式使用屬性

class Person:
    def __init__(self, name1, age1, gender1='男'):
        self.name = name1
        self.age = age1
        self.gender = gender1

    def eat(self):
        print(f'{self.name}吃飯')


p1 = Person('小明', 1)
print(p1.name, p1.age, p1.gender)

p2 = Person('小花', 3, '女')
print(p2.name, p2.age, p2.gender)
p2.name = '大花'
print(p2.name)

# p1.eat()
p2.eat()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容