day13-ClassAndObject

一.recode

1.迭代器和生成器
迭代器,獲取數(shù)據(jù): next(迭代器)、for循環(huán)遍歷,數(shù)據(jù)來源:轉(zhuǎn)換电爹、生成器

"""
def 函數(shù)名():
    yield 值

(表達式 for 變量 in 序列 if條件語句)
"""

補充: 三目運算符

"""
C中的三目運算符: 表達式?值1:值2  --  判斷表達式的值是否為真,如果是整個運算的結(jié)果是值1,否則是值2

python的三目運算操作: 值1 if 表達式 else 值2  --  判斷表達式的值是否為真,如果是整個運算的結(jié)果是值1,否則是值2
"""

2.模塊
模塊就是py文件
import math

導(dǎo)入模塊中所有的內(nèi)容
from math import *
if name == 'main':
pass

包/庫就是文件夾

3.異常處理

"""
try:
    需要捕獲異常的代碼段
exccpt:
    出現(xiàn)異常后對異常的處理代碼
finally:
    不管try后面的代碼是否異常,異常是否被捕獲都執(zhí)行的代碼
"""

二.class1

編程思想的轉(zhuǎn)變

"""
1.面向過程編程  --  算法
2.函數(shù)式編程  --  函數(shù)/模塊
3.面向?qū)ο缶幊? --  類和對象
"""

三.defineClass

"""
1.什么是類恢筝、什么是對象

1) 官方定義
類就是擁有相等功能和相同屬性的對象的集合  --  抽象的
對象就是類的實例  --  具體
2) 生活角度看類和對象
如果人是類,余婷就是對象,駱昊也是對象
如果電腦是類,我桌上的這臺電腦就是對象
"""

2.類的聲明
"""
1) 語法
class 類名:
    類的內(nèi)容

2) 說明
class  -  聲明類的關(guān)鍵字
類名  -  標識符,不能是關(guān)鍵字,見名知義,采用駝峰式命名(采用通過單詞首字母大寫的方式來區(qū)分不同的單詞),首字母大寫
:  -  固定寫法
類的內(nèi)容  -  主要包含: 類的說明文檔哀卫、屬性(普通的變量)、功能(函數(shù)/方法)
"""

3.對象怎么聲明
"""
對象 = 類()  -  創(chuàng)建指定的類對應(yīng)的對象
"""

4.類中的方法
"""
1) 什么是方法: 聲明在類中的函數(shù)就叫方法
2) 類中的方法有三種: 對象方法撬槽、類方法此改、靜態(tài)方法
a.對象方法: 直接聲明在類中的函數(shù)
                    有默認參數(shù)self,通過對象調(diào)用的時候這個參數(shù)不用傳參,因為系統(tǒng)會自動將當前對象傳遞給self.(self,當前對象  -  誰調(diào)用self就指向誰,當前類的對象能做的事情self都能做)
通過類的對象來調(diào)用:  對象.對象方法()

b. 類方法: 聲明函數(shù)前@classmethod
                 有默認參數(shù)cls,通過類調(diào)用的時候這個參數(shù)不用傳參,因為系統(tǒng)會自動將當前類傳遞給cls(cls,當前類  -  誰調(diào)用就指向誰,當前類能做的事情cls都能做)
通過類來調(diào)用:  類.類方法()

c. 靜態(tài)方法: 聲明函數(shù)前加@staticmethod
                    沒有默認參數(shù)
通過類來調(diào)用:  類.靜態(tài)方法()
"""
# 聲明一個Person類
class Person:
    """人類"""
    # ======屬性=======

    # ======方法=======
    # ======對象方法=======
    def eat(self, food):
        # self = p1, food = '面條'
        # self = p2, food = '火鍋'
        print('self', self)
        print('人吃'+food)    
        self.study('python')

    def study(self, type):
        # self = p1, type = 'python'
        # self = p2, type = 'python'
        print('學(xué)習(xí)'+type)

# ============類方法=========
@classmethod
def destroy(cls):
    # cls = Person
    # 通過cls創(chuàng)建對象
    tp = cls()  # tp = Person()
    cls.func1()  # Person.func1()
    print('tp:', tp)
    print('cls:', cls)
    print('人類破壞環(huán)境')

@classmethod
def func1(cls):
    # cls = Person
    print('臨時類方法')

# ==========靜態(tài)方法=========
@staticmethod
def beat_animal():
    print('人類毆打小動物')


# 創(chuàng)建Person類的對象
p1 = Person()
p0 = p1
print(p1, p0)
p2 = person()
print(p2)

# 對象調(diào)用對象方法
p1.eat('面條')
# p1.study()
p2.eat('火鍋')

# 類調(diào)用類方法
print(Person)
Person.destroy()

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

四.init

常識:
1.什么是init方法
init是類默認繼承的一個魔法方法,用來初始化類;本質(zhì)是對象方法,但是不需要程序員自己調(diào)用,會被自動調(diào)用
通過類創(chuàng)建對象的時候(通過構(gòu)造方法創(chuàng)建對象),系統(tǒng)會自動調(diào)用類中的init方法,并且構(gòu)造方法中的實參會全部傳給init方法
創(chuàng)建對象的時候需不需要參數(shù),需要幾個參數(shù),看這個類的init方法

(了解)聲明類的時候系統(tǒng)會自動給我們創(chuàng)建一個函數(shù),這個函數(shù)的函數(shù)名和聲明類的類名一樣,這個函數(shù)叫構(gòu)造方法.函數(shù)中會先在內(nèi)存中開辟空間創(chuàng)建對象,然后用創(chuàng)建的對象去調(diào)用類的init方法,最后才將對象返回

class Person:
     def __init__(self, name, age):
         print(self, name, age)
         print('init方法')

# def Person(*args, **kwargs):
#     t = 創(chuàng)建對象
#     t.__init__(*args, **kwargs)
#     return t

print('===========')
p1 = Person('yuting', 18)
print(p1)
print('===========')

p2 = Person('小明', age=20)


# ========模擬構(gòu)造方法和init的關(guān)系=========
def yt_init(name, age):
    print('自己的init', name)


def yt_Person(*args, **kwargs):
    # args = ('yuting',)  kwargs={}
    yt_init(*args, **kwargs)


yt_Person('xiaoming', 20)
yt_Person(name='張三', age=21)
yt_Person('xiaohua', age=9)

五.property

1.屬性

"""
類中的屬性分為: 對象屬性和字段

1) 字段: 直接聲明在類中變量就是字段;字段要通過'類.字段'的方式來使用;當屬性的值不會因為對象不同而不同,這種屬性就可以聲明成類的字段

2) 對象屬性:在__init__方法中,以'self.屬性 = 值' 的形式聲明;對象屬性要通過對象.屬性的方式來使用;當屬性的值會因為對象不同而不同的時候,使用對象屬性
"""
class Dog:
    """狗"""
    # =========字段==========
    numbers = 10

    # =========對象屬性========
    def __init__(self, name1, color1='黃色', gender1='公'):
        self.name = name1
        self.color = color1
        self.gender = gender1
        self.age = 0


# 使用類的字段
Dog.numbers = 100
print(Dog.numbers)

# 使用對象屬性
dog1 = Dog('大黃')
print(dog1.color)
print(dog1.gender)
print(dog1.age)

dog2 = Dog('財財', color1='灰色')
print(dog2.color)
print(dog2.gender)
print(dog2.age)

# 練習(xí): 聲明一個學(xué)生類,擁有屬性:名字、電話侄柔、年齡共啃、學(xué)號  擁有功能:學(xué)習(xí)(打印XXX在學(xué)XXX)
class Student:
    def __init__(self, name, tel, age=0):
        self.name = name
        self.tel = tel
        self.age = age
        self.num = '0000'

    def study(self, subject: str):
        print(self.name+'在學(xué)'+subject)


stu = Student('小明', '182323332', 12)
stu.study('python')
stu1 = Student('小花', '182323332', 12)
stu1.study('H5')

# 寫一個矩形類,有屬性:長和寬   方法:求面積暂题、求周長
class Rect:
    def __init__(self, length, width):
        self.length = length
        self.width = width

    def area(self):
        return self.length * self.width

    def perimeter(self):
        return (self.length + self.width) * 2


r1 = Rect(10, 5)
print(r1.area(), r1.perimeter())
  1. 聲明類的時候方法的選擇(牢記)
1) 對象方法: 實現(xiàn)函數(shù)的功能需要對象屬性的時候,就使用對象方法
2) 類方法: 實現(xiàn)函數(shù)的功能不需要對象屬性,但是需要類的相關(guān)的操作,就使用類方法
3) 靜態(tài)方法: 實現(xiàn)函數(shù)的功能既不需要對象屬性,也不需要類相關(guān)的操作,就使用靜態(tài)方法

六.propertyOperation

python中的對象屬性支持增移剪、刪、改薪者、查

class Dog:
    def __init__(self, name):
        self.name = name
        self.age = 0


dog1 = Dog('大黃')
dog2 = Dog('財財')
# 1.查
"""
a. 對象.屬性   -  獲取指定對象指定屬性對應(yīng)的值, 如果屬性不存在會報錯
b. getattr(對象, 屬性名, 默認值)   -  獲取指定對象指定屬性對應(yīng)的值挂滓;當屬性不存在有默認值的時候不報錯,返回默認值啸胧。沒有默認值的時候報錯
"""
print(dog1.name)
# print(dog1.name2)   # AttributeError: 'Dog' object has no attribute 'name2'
print(getattr(dog1, 'name2', 100))

# 2.增、改
"""
a. 對象.屬性 = 值    -  當屬性不存在就添加屬性幔虏,當屬性存在修改屬性的值
b. setattr(對象, 屬性名, 值)     -   當屬性不存在就添加屬性纺念,當屬性存在修改屬性的值
"""
dog1.gender = '雌'
print(dog1.gender)
dog1.name = '貝貝'
print(dog1.name)

a_name = 'color'
setattr(dog1, 'color', '白色')
print(getattr(dog1, 'color'))
setattr(dog1, 'name', '金金')
print(dog1.name)

# 3.刪
"""
a. del 對象.屬性
b. delattr(對象, 屬性名)   
"""
del dog1.name
# print(dog1.name)    # AttributeError: 'Dog' object has no attribute 'name'
delattr(dog1, 'age')
# print(dog1.age)       # AttributeError: 'Dog' object has no attribute 'age'


# 注意: 對象屬性的增刪改查只針對單個對象
# print(dog2.gender)   #  AttributeError: 'Dog' object has no attribute 'gender'

print(dog2.name, dog2.age
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市想括,隨后出現(xiàn)的幾起案子陷谱,更是在濱河造成了極大的恐慌,老刑警劉巖瑟蜈,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烟逊,死亡現(xiàn)場離奇詭異,居然都是意外死亡铺根,警方通過查閱死者的電腦和手機宪躯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來位迂,“玉大人访雪,你說我怎么就攤上這事详瑞。” “怎么了臣缀?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵坝橡,是天一觀的道長。 經(jīng)常有香客問我精置,道長计寇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任脂倦,我火速辦了婚禮番宁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘狼讨。我一直安慰自己贝淤,他們只是感情好,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布政供。 她就那樣靜靜地躺著播聪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪布隔。 梳的紋絲不亂的頭發(fā)上离陶,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音衅檀,去河邊找鬼招刨。 笑死,一個胖子當著我的面吹牛哀军,可吹牛的內(nèi)容都是我干的沉眶。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼杉适,長吁一口氣:“原來是場噩夢啊……” “哼谎倔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起猿推,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤片习,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蹬叭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體藕咏,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年秽五,在試婚紗的時候發(fā)現(xiàn)自己被綠了孽查。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡坦喘,死狀恐怖卦碾,靈堂內(nèi)的尸體忽然破棺而出铺坞,到底是詐尸還是另有隱情,我是刑警寧澤洲胖,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布济榨,位于F島的核電站,受9級特大地震影響绿映,放射性物質(zhì)發(fā)生泄漏擒滑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一叉弦、第九天 我趴在偏房一處隱蔽的房頂上張望丐一。 院中可真熱鬧,春花似錦淹冰、人聲如沸库车。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柠衍。三九已至,卻和暖如春晶乔,著一層夾襖步出監(jiān)牢的瞬間珍坊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工正罢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留阵漏,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓翻具,卻偏偏與公主長得像履怯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子裆泳,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

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