12-迭代器姐叁、面向?qū)ο?/h1>

一、生成器

a. 可以看成是一個(gè)可以存儲(chǔ)多個(gè)數(shù)據(jù)的容器。一次只能生成一個(gè)數(shù)據(jù)外潜,從前往后原环,不能逆向取,不能跳躍
b. 獲取生成器里面的數(shù)據(jù)处窥,需要使用 _next_( )方法
c. 只要函數(shù)聲明中有 yield 關(guān)鍵字嘱吗,就表明這個(gè)函數(shù)是生成器。


# 1,1,2,3,5,8,13,21.....
def xu_lie(n):
    pre_1 = 1
    pre_2 = 1
    for x in range(1, n+1):
        if x == 1 or x == 2:
            current = 1
            yield current

            # print(current)
            continue
        current = pre_1 + pre_2
        pre_1, pre_2 = pre_2, current
        # print(current)
        yield current




二滔驾、類和對(duì)象

1.定義

  • 類:對(duì)擁有相同功能和屬性的對(duì)象的封裝
  • 對(duì)象:類的實(shí)例


2.聲明

  • 類的聲明:
類的聲明:
class 類名(父類):
    屬性
    方法
解說(shuō)

class: python中聲明類的關(guān)鍵字
類名: 標(biāo)識(shí)符谒麦,類名的首字母大寫,駝峰式命名
( ): 類要繼承自其它的類哆致,需要寫括號(hào)绕德,括號(hào)里面是父類的名字√В可以省略
屬性: 對(duì)象屬性和類的字段 --- 保存數(shù)據(jù)
方法: 實(shí)質(zhì)就是聲明在類中的函數(shù) --- 實(shí)現(xiàn)功能

實(shí)例:
 1.聲明類Person
class Person:
    """類的說(shuō)明:人類"""

    # 聲明兩個(gè)對(duì)象方法耻蛇,需要使用對(duì)象來(lái)調(diào)用
    """
    對(duì)象方法默認(rèn)都有一個(gè)參數(shù)self,在調(diào)用方法的時(shí)候胞此,這個(gè)參數(shù)不用傳參(系統(tǒng)會(huì)自動(dòng)給self傳參)
    誰(shuí)來(lái)調(diào)用這個(gè)方法臣咖,self就是誰(shuí)
    """
    def eat(self):
        print('self:', self)
        print('在吃飯')

    def sleep(self):
        print('在睡覺(jué)')


  • 對(duì)象的聲明
聲明對(duì)象:

通過(guò)類的構(gòu)造方法去創(chuàng)建對(duì)象(名字和類名同名的方法就是構(gòu)造方法,自動(dòng)生成的)
對(duì)象名 = 類名()

類對(duì)象可以通過(guò)點(diǎn)語(yǔ)法使用類中聲明的對(duì)象的方法和屬性
對(duì)象.方法名()
對(duì)象.屬性名

實(shí)例
# 1.聲明類Person
class Person:
    """類的說(shuō)明:人類"""

    # 聲明兩個(gè)對(duì)象方法漱牵,需要使用對(duì)象來(lái)調(diào)用
    """
    對(duì)象方法默認(rèn)都有一個(gè)參數(shù)self夺蛇,在調(diào)用方法的時(shí)候,這個(gè)參數(shù)不用傳參(系統(tǒng)會(huì)自動(dòng)給self傳參)
    誰(shuí)來(lái)調(diào)用這個(gè)方法酣胀,self就是誰(shuí)
    """
    def eat(self):
        print('self:', self)
        print('在吃飯')

    def sleep(self):
        print('在睡覺(jué)')



# 2. 聲明對(duì)象
p1 = Person()
print('p1:',p1)

# 一個(gè)類可以有多個(gè)對(duì)象
p2 = Person()
print('p2:',p2)

# 對(duì)象可以調(diào)用對(duì)象方法
p1.eat()
p2.eat()
p1.sleep()
p2.sleep()


3.對(duì)象屬性的聲明

對(duì)象屬性的聲明
class 類名:
    def __init__(self):
        self.屬性名 = 初值
        self.屬性名2 = 初值2
實(shí)例
class Person:
    """人類"""
    """
    1.init方法是系統(tǒng)自帶的一個(gè)方法刁赦,這個(gè)方法不能直接調(diào)用,通過(guò)類創(chuàng)建對(duì)象的時(shí)候系統(tǒng)會(huì)自動(dòng)調(diào)用這個(gè)方法
    init方法的作用是對(duì)對(duì)象的屬性進(jìn)行初始化
    2.通過(guò)構(gòu)造方法創(chuàng)建對(duì)象的時(shí)候闻镶,一定要保證截型,init方法中除了self以外,其他的每個(gè)參數(shù)都必須有值
    """
    def __init__(self, name1='', age1=0, sex='女'):
        # 在這個(gè)地方聲明對(duì)象的屬性
        # 在init方法中聲明對(duì)象的屬性
        """
        name儒溉、age和sex就是Person這個(gè)類的對(duì)象屬性。類的對(duì)象屬性发钝,需要通過(guò)對(duì)象來(lái)使用
        """
        self.name = name1
        self.age = age1
        self.sex = sex

    def run(self, n):
        print(self.name)
        print(n)



# 注意:構(gòu)造方法中的參數(shù)顿涣,實(shí)質(zhì)是傳給init方法的參數(shù)的
p1 = Person('yuting', 18)

p1.run(100)

# 通過(guò)對(duì)象使用對(duì)象屬性
print(p1.name, p1.age, p1.sex)

p2 = Person('女神', 30)
print(p2.sex, p2.name)

"""通過(guò)不同的方式創(chuàng)建對(duì)象"""
# 創(chuàng)建對(duì)象的時(shí)候不給屬性賦值
p3 = Person()

p4 = Person('')


4.增刪改查

class Dog:
    """狗類"""
    def __init__(self, age=0, color='yellow'):
        self.age = age
        self.color = color



dog1 = Dog(3,'white')


# 1.查(獲取屬性)
"""
方法一:對(duì)象.屬性 (如果屬性不存在,會(huì)報(bào)錯(cuò))
方法二:對(duì)象.__getattribute__(屬性名) 和 getattr(對(duì)象, 屬性名, 默認(rèn)值)
"""
print(dog1.age, dog1.color)

print(dog1.__getattribute__('age'))
print(getattr(dog1, 'age'))

# 如果設(shè)置了default的值酝豪,那么當(dāng)屬性不存在的時(shí)候不會(huì)報(bào)錯(cuò)涛碑,并且返回默認(rèn)值
print(getattr(dog1, 'abc', '無(wú)名氏'))

# 2.改(修改屬性的值)
"""
方法一: 對(duì)象.屬性 = 新值
方法二:對(duì)象.__setattr__(屬性名,新值) 和  setattr(對(duì)象,屬性名孵淘,新值)
"""
dog1.age = 4
print(dog1.age)

dog1.__setattr__('color', 'black')
print(dog1.color)

setattr(dog1, 'color', 'blue')
print(dog1.color)



# 3.增加(增加對(duì)象屬性)
"""
對(duì)象.屬性 = 值(屬性不存在)
注意:屬性是添加給對(duì)象的蒲障,而不是類的
"""
dog1.name = '大黃'
print(dog1.name)

dog1.__setattr__('type', '哈士奇')
print(dog1.type)

setattr(dog1,'sex', '公')
print(dog1.sex)

# dog2 = Dog()
# print(dog2.name)

# 4.刪(刪除對(duì)象的屬性)
"""
方法一: del 對(duì)象.屬性

注意:刪除屬性也是刪的具體某個(gè)對(duì)象的屬性。不會(huì)影響這個(gè)類的其他對(duì)象
"""
# del dog1.age
# print(dog1.age)  # AttributeError: 'Dog' object has no attribute 'age'

# dog1.__delattr__('age')
# print(dog1.age) # AttributeError: 'Dog' object has no attribute 'age'

delattr(dog1, 'color')
# print(dog1.color)  # 'Dog' object has no attribute 'color'


"""
練習(xí):聲明一個(gè)學(xué)生類,擁有屬性:姓名揉阎、性別庄撮、年齡。方法:學(xué)習(xí)
1.聲明學(xué)生類的對(duì)象毙籽,聲明的時(shí)候就給姓名洞斯、性別和年齡賦值
2.通過(guò)三種方式分別獲取姓名、性別和年齡坑赡,并且打印
3.給學(xué)生對(duì)象添加一個(gè)屬性烙如,電話
4.修改學(xué)生的年齡
5.刪除學(xué)生的性別
"""
class Student:
def __init__(self, name='', age=0, sex=''):
    self.name = name
    self.sex = sex
    self.age = age

def study(self):
    print('%s學(xué)習(xí)' % self.name)


stu1 = Student('小明', 30, '男')

print(stu1.name)
print(stu1.__getattribute__('age'))
print(getattr(stu1, 'sex'))

stu1.tel = '123333'

stu1.age = 35

del stu1.sex

stu1.study()


5.類中的方法

  • 屬性

a.對(duì)象屬性: 屬于對(duì)象的,不同對(duì)象對(duì)應(yīng)的值可能不一樣(對(duì)象屬性毅否,通過(guò)對(duì)象來(lái)使用)


b.類的字段: 聲明在類里面亚铁,函數(shù)外面。類的屬性屬于類(類的字段螟加,通過(guò)類來(lái)使用)

  • 方法(對(duì)象方法(方法)徘溢、類方法、靜態(tài)函數(shù))

對(duì)象方法:自帶一個(gè)self參數(shù)仰迁,一般要通過(guò)對(duì)象去調(diào)用


類方法:

1.使用@classmethod修飾
2.自帶一個(gè)cls參數(shù)甸昏,并且這個(gè)參數(shù)不用傳參,誰(shuí)來(lái)調(diào)用這個(gè)方法徐许,cls就指向誰(shuí)
3.類方法要通過(guò)類來(lái)調(diào)用



靜態(tài)方法:

1.使用@staticmethod修飾
2.沒(méi)有默認(rèn)參數(shù)
3.靜態(tài)方法要通過(guò)類來(lái)調(diào)用


  • 如何選擇方法:

  • 怎么選擇用對(duì)象方法施蜜、類方法、靜態(tài)方法雌隅?
    i如果實(shí)現(xiàn)函數(shù)的功能需要使用對(duì)象的屬性翻默,就聲明成對(duì)象方法;

  • 如果實(shí)現(xiàn)函數(shù)的功能需要使用類的字段或者調(diào)用類的方法恰起,就聲明成類方法

  • 如果實(shí)現(xiàn)函數(shù)功能既不需要對(duì)象的屬性也不需要類的字段修械,就聲明成靜態(tài)方法





易竹小居士.jpg

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者

  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市检盼,隨后出現(xiàn)的幾起案子肯污,更是在濱河造成了極大的恐慌,老刑警劉巖吨枉,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蹦渣,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡貌亭,警方通過(guò)查閱死者的電腦和手機(jī)柬唯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)圃庭,“玉大人锄奢,你說(shuō)我怎么就攤上這事失晴。” “怎么了拘央?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵涂屁,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我堪滨,道長(zhǎng)胯陋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任袱箱,我火速辦了婚禮遏乔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘发笔。我一直安慰自己盟萨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布了讨。 她就那樣靜靜地躺著捻激,像睡著了一般。 火紅的嫁衣襯著肌膚如雪前计。 梳的紋絲不亂的頭發(fā)上胞谭,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音男杈,去河邊找鬼丈屹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛伶棒,可吹牛的內(nèi)容都是我干的旺垒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼肤无,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼先蒋!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起宛渐,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤竞漾,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后窥翩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體畴蹭,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年鳍烁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片繁扎。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡幔荒,死狀恐怖糊闽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情爹梁,我是刑警寧澤右犹,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站姚垃,受9級(jí)特大地震影響念链,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜积糯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一掂墓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧看成,春花似錦君编、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至梦重,卻和暖如春兑燥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背琴拧。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工降瞳, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人艾蓝。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓力崇,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親赢织。 傳聞我的和親對(duì)象是個(gè)殘疾皇子亮靴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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