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

一.編程思想

編程思想: 面向過程編程(窮人思想), 函數(shù)式編程, 面向?qū)ο缶幊?富豪)

面向過程編程  - 算法和邏輯
函數(shù)式編程   - 函數(shù)
面向?qū)ο缶幊? - 類和對(duì)象
1.求1+...+100
sum1 = 0
for n in range(1, 101):
    sum1 += n
print(sum1)


def sum1(x: int):
    sums = 0
    for m in range(1, x+1):
        sums += m
    return sums


print(sum1(100))
print(sum(range(1, 101)))

===面向?qū)ο?==
求1+...+100


class Math:
    def sums(self, a):
        sum3 = 0
        for x in range(1, a + 1):
            sum3 += x
        return sum3

    def produc(self, q):
        sum2 = 1
        for x in range(1, q + 1):
            sum2 *= x
        return sum2


s = Math()
print(s.sums(100))
print(Math().produc(14))

二.類和對(duì)象

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

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

如果是人類, 具體的某個(gè)人就是人的對(duì)象
如果水杯是類, 我桌上的這個(gè)黑色杯子就是對(duì)象
如果車是類, 具體的某一輛車就是對(duì)象

2.類的聲明 - 確定這個(gè)類共同的屬性和功能是什么

1)語(yǔ)法:

class 類名:
    類的說明文檔
    類的內(nèi)容

2)說明

class - 關(guān)鍵字
類名  - 要求: 標(biāo)識(shí)符, 不能是關(guān)鍵字
        規(guī)范: a.首字母大寫, 采用駝峰式命名規(guī)范 b.見名知義 c.不能使用系統(tǒng)提供的函數(shù)或者類名
類的說明文檔  - 和函數(shù)說明文檔一樣
類的內(nèi)容    - 主要包含屬性和方法(方法就是生命在類中的函數(shù))
class Person:
    """人類:
    屬性-
    方法-
    """
    def eat(self, food):    # 對(duì)象方法
        print('eat %s' % food)

    @classmethod        # 類方法
    def func1(cls):
        pass
    
    @staticmethod       # 靜態(tài)方法
    def func2():
        pass

3.聲明對(duì)象

1)語(yǔ)法:

對(duì)象 = 類()
p1 = Person()   # p1存儲(chǔ)的就是Person類的對(duì)象
p2 = Person()   # 同一個(gè)類可以創(chuàng)建對(duì)個(gè)對(duì)象
p3 = p1         # p1和p3指向同一個(gè)對(duì)象
p1.eat('noodles')

三.對(duì)象方法

1.對(duì)象方法

類中的方法分為: 對(duì)象方法, 類方法和靜態(tài)方法

1)對(duì)象方法

a.怎么聲明: 直接聲明(聲明前不需要加任何裝飾器)在類中的函數(shù)就是對(duì)象方法
b.特點(diǎn): 自帶self參數(shù); 用對(duì)象調(diào)用對(duì)象方法的時(shí)候self不用傳參, 系統(tǒng)會(huì)自動(dòng)將當(dāng)前對(duì)象傳給self, self可以做到誰(shuí)調(diào)用就指向誰(shuí)
c.怎么調(diào)用: 以'對(duì)象.對(duì)象方法()'的形式來調(diào)用 - 通過對(duì)象來調(diào)用對(duì)象方法
class Person:
    def eat(self, food='米飯'):
        print(self)
        print('eat')
        print('人在吃{}'.format(food))


p1 = Person()
print(p1)
p1.eat()

p2 = Person()
print(p2)
p2.eat('miles')

# Person.eat('asd')

四.構(gòu)造方法

1.構(gòu)造函數(shù) - 函數(shù)名和類名一樣, 用來創(chuàng)建類的對(duì)象的函數(shù)

python中聲明類的時(shí)候, 系統(tǒng)會(huì)自動(dòng)為這個(gè)類創(chuàng)建一個(gè)構(gòu)造函數(shù), 函數(shù)的作用是創(chuàng)建對(duì)象
構(gòu)造方法的執(zhí)行過程: a.在內(nèi)存中開辟空間創(chuàng)建對(duì)象 b.用創(chuàng)建好的對(duì)象去調(diào)用init方法 c.返回對(duì)象在內(nèi)存中的地址

2.init方法

聲明在類中用來對(duì)對(duì)象進(jìn)行初始化的方法: (當(dāng)對(duì)象一創(chuàng)建出來, 這個(gè)方法就會(huì)被自動(dòng)調(diào)用)

注意: 創(chuàng)建對(duì)象的時(shí)候構(gòu)造方法需不需要傳參, 需要傳幾個(gè)參數(shù), 看這個(gè)類的init方法

class Dog:
    def __init__(self, name='', age=0):
        print(self)
        print('初始化', name, age)


dog1 = Dog('baba', 18)
print(dog1)
dog2 = Dog('baba', 20)
dog3 = Dog()

#構(gòu)造方法的偽代碼

def Dog():
    對(duì)象 = 開辟空間創(chuàng)建對(duì)象
    對(duì)象.__init__()
    return 對(duì)象

五.屬性

1.類中的屬性

屬性就是聲明在類中的變量
類中的屬性分為: 字段, 對(duì)象屬性

1)字段

a.怎么聲明: 生命在類的里面函數(shù)的外面的變量就是字段
b.怎么使用: 通過類去使用(以'類.字段'的形式使用)
c.什么時(shí)候使用: 屬性值不會(huì)因?yàn)閷?duì)象不同而不同, 這樣的屬性就聲明成類的字段

class Person:
    # num 就是字段
    num = 100

    def func1(self):
        pass
    
    def func2(self):
        pass


Person.num = 123
print(Person.num)

2)對(duì)象屬性(重要)

a.怎么聲明: 以'self.屬性名=值'的形式聲明在init方法中
b.怎么使用: 通過對(duì)象去使用,
c.什么時(shí)候用: 屬性的值可能會(huì)因?yàn)閷?duì)象不同而不一樣, 這樣的屬性就聲明成對(duì)象屬性
class Student:
    def __init__(self, name, age, sno, sex='b'):
        # 這兒的name, age, sex, sno 就是對(duì)象屬性
        self.name = name
        self.age = age
        self.sex = sex
        self.sno = sno


stu1 = Student('小明', 18, 'stu001', 'n')
stu1.name = 'lxh'
print(stu1.name, stu1.age, stu1.sex, stu1.sno)

練習(xí): 聲明一個(gè)Dog類,

1)擁有屬性: 名字, 年靚, 性別和類型; 要求創(chuàng)建對(duì)象的時(shí)候名字, 品種必須賦值, 年齡和性別可以不賦值
2)擁有兩個(gè)方法, 一個(gè)用來打印狗的信息(顯示信息), 一個(gè)叫喚的方法: 以'xxx: 汪汪'的格式打印叫喚信息
class Dog:
    def __init__(self, name, breed, age=3, sex='母'):
        self.name = name
        self.breed = breed
        self.age = age
        self.sex = sex

    def message(self):
        print(self.name, self.age, self.sex, self.breed)
    
    def shout(self):
        print('%s: 汪汪汪!!!' % self.name)


dog1 = Dog('小白', '哈奇士')
dog1.message()
dog1.shout()

六.對(duì)象屬性的增刪改查

python中類的對(duì)象的對(duì)象屬性支持增刪改查
class Person:
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex


p1 = Person('小明', 19, '男')
p2 = Person('小花', 18, '女')

1.查(獲取屬性的值)

方法一: 對(duì)象.屬性      
方法二: getattr(對(duì)象, 屬性名: str) / getattr(對(duì)象, 屬性名, 默認(rèn)值)
方法三: 對(duì)象.__getattribute__(屬性名)
print(p1.name)      # 簡(jiǎn)單
print(getattr(p1, 'name'))  # 靈活
print(p1.__getattribute__('name'))

# value = input('屬性名:')
# print(getattr(p1, value))

# print(p1.height)    # AttributeError
print(getattr(p1, 'height', 180))

2.增/改

方法一: 對(duì)象.屬性 = 值
方法二: setattr(對(duì)象, 屬性名, 值)
# 屬性存在是修改
p1.name = '明明'
print(p1.name)

setattr(p1, 'age', 38)
print(p1.age)

# 屬性不存在就添加
p1.weight = 190
print(p1.weight)

setattr(p1, 'face', 60)
print(p1.face)

3.刪

方法一: del 對(duì)象.屬性
方法二: delattr(對(duì)象, 屬性名) 
del p1.name
# print(p1.name)      # AttributeError: 'Person' object has no attribute 'name'

delattr(p1, 'face')
# print(p1.face)      # AttributeError: 'Person' object has no attribute 'face'

4.slots魔法

通過給slots字段賦值來約束當(dāng)前類的對(duì)象有哪些對(duì)象屬性
class Dog:
    __slots__ = ('name', 'age', 'sex', 'height', 'weight')

    def __init__(self, name, age):
        self.name = name
        self.age = age


dog1 = Dog('大黃', 3)
dog1.name = '皇皇'
dog1.height = 180
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容