day16總結(jié)(2019-08-12)

1.多繼承

python中的類支持多繼承姐叁,也就是讓一個類有多個父類够掠。

class Animal(object):
    num = 100

    def __init__(self):
        self.age = 0
        self.gender = '雌'

    @classmethod
    def func2(cls):
        print('動物類的類方法果漾。')


class Fly(object):
    name = '飛'

    def __init__(self):
        self.height = 100
        self.time = 5
        self.speed = 100

    def func2(self):
        print('飛行的對象的方法佛猛。')


class Bird(Animal, Fly):
    pass


bird1 = Bird()
print(Bird().num, Bird().name)  # 100   飛
print(Bird.num, Bird.name)  # 100  飛
print(bird1.num, bird1.name)  # 100 飛

print(bird1.gender)  # 雌
print(bird1.speed)   # AttributeError: 'Bird' object has no attribute 'speed'

當子類在繼承多個父類的時候祠锣,只繼承了第一個父類的屬性(Animal),所以子類在調(diào)用speed屬性的時候就會報錯。

運算符

 python中所有的類型都是類泵三,所以所有的數(shù)據(jù)都是對象耕捞,python中使用的任意運算符都是在調(diào)用相應(yīng)類中的相應(yīng)的方法。每一個運算符對應(yīng)的什么方法都是固定的烫幕,某種數(shù)據(jù)是否支持該運算符就看這個數(shù)據(jù)類型中是否實現(xiàn)了對應(yīng)的方法俺抽。

默認情況下,類的對象支持 ==较曼,!=

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

    def __repr__(self):
        return '<%s, id:%s>' % (str(self.__dict__)[1:-1], hex(id(self)))

    # a+b ->  a.__add__(b)
    # self -> 當前類的對象磷斧,也是+前面的那個數(shù)據(jù)
    # other -> +后面的那個數(shù)據(jù), 類型根據(jù)運算規(guī)則的設(shè)計可以是任何類型的數(shù)據(jù)
    def __add__(self, other):
        # return self.age + other.age
        return self.score + other.score
        # return Student(self.name+other.name, self.age+other.age, self.score + other.score)
        # return self.score + other

    # a*b -> a.__mul__(b)
    def __mul__(self, other):
        list = []
        for _ in range(other):
            list.append(copy.copy(self))
        return list

    # a<b  -> a.__lt__(b)
    # 注意: <和>符號只需要重載其中一個就可以
    def __lt__(self, other):
        return self.score < other.score


stu1 = Student('小明', 19, 90)
stu2 = Student('小花', 20, 78)

# stu1.__add__(stu2)
print(stu1 + stu2)

# stu1.__add__(100)
# print(stu1 + 100)

print(stu1 * 2)  # [<'name': '小明', 'age': 19, 'score': 90, id:0x16c61f4ed68>,
                          <'name': '小明', 'age': 19, 'score': 90, id:0x16c61f4ea20>]

# students = [stu1, stu2, Student('小紅', 12, 100)]
# students.sort()
# print(students)
#
# print(stu1 < stu2)
# print(stu1 > stu2)

淺拷貝和深拷貝

1.直接賦值
將變量中的地址直接賦給新的變量,賦值后兩個變量的地址相同

p1 = 20
p2 = p1
print(id(p1), id(p2))  #4537270848 4537270848

2.拷貝
不管是淺拷貝還是深拷貝都是會對原數(shù)據(jù)進行賦值產(chǎn)生新的地址捷犹,淺拷貝只是拷貝當前對象弛饭,不會拷貝當前對象中的子對象,深拷貝則是不僅拷貝當前對象萍歉,也拷貝當前對象中的所有子對象侣颂。

import copy
list1 = [1, 2, 3]
list2 = copy.copy(list1)
list3 = copy.deepcopy(list1)
print(id(list1), id(list2), id(list3))

3.淺拷貝
字符串、列表和元組的切片翠桦;對象.copy();copy模塊中的copy方法都是淺拷貝横蜒,淺拷貝只拷貝當前對象胳蛮,不會對子對象進行拷貝
4.深拷貝
深拷貝就是copy模塊中的deepcopy方法

# 練習(xí):
a = ['color', 'height', 'background']
b = [a, 'aaa', 'bbb']
c1 = b
c2 = copy(b)
c3 = deepcopy(b)
a[-1] = ['BG']
b.append('ccc')

# b = [['color', 'height', 'background'], 'aaa', 'bbb']
# 問題: print(c1), print(c2), print(c3)的結(jié)果分別是
# c1 = [['color', 'height', ['BG']], 'aaa', 'bbb', 'ccc']
# c2 = [['color', 'height', ['BG']], 'aaa', 'bbb']
# c3 = [['color', 'height', 'background'], 'aaa', 'bbb']
print(c1)
print(c2)
print(c3)

枚舉

枚舉值的特點:
1)可以通過有意義的屬性名直接顯示數(shù)據(jù)
2)每個數(shù)據(jù)的值不能修改
3)可以做到不同的數(shù)據(jù)值唯一

from enum import Enum, unique


@unique
class PokerNum(Enum):
    J = 11
    Q = 12
    K = 13
    A = 1


class Color:
    RED = (255, 0, 0)


print(PokerNum.J)
print(PokerNum.K.value, PokerNum.J.value > PokerNum.Q.value)

內(nèi)存管理

1.內(nèi)存的開辟
內(nèi)存區(qū)間分為棧區(qū)間和堆區(qū)間销凑,棧區(qū)間的內(nèi)存自動開辟自動釋放,堆區(qū)間的內(nèi)存需要手動來開辟以及釋放仅炊;但是python已經(jīng)將堆區(qū)間內(nèi)存的開辟和釋放自動化
a.在python中當每次給變量賦值的時候斗幼,系統(tǒng)會先在堆區(qū)間中開辟空間將數(shù)據(jù)存起來,然后再將數(shù)據(jù)在堆區(qū)間的地址存到變量中抚垄,變量存儲在棧區(qū)間蜕窿。
b.數(shù)字和字符串在開辟空間的時候谋逻,會先檢查內(nèi)存中之前是否存儲過該數(shù)據(jù),如果有就直接使用這個數(shù)據(jù)桐经,沒有則開辟新的空間來保存這個數(shù)據(jù)

2.內(nèi)存的釋放
棧區(qū)間:全局棧區(qū)間在程序結(jié)束后自動銷毀毁兆,函數(shù)棧區(qū)間在函數(shù)調(diào)用結(jié)束后自動銷毀。
堆區(qū)間:看一個對象是否被銷毀阴挣,就看這個對象的引用計數(shù)是否為0气堕,如果引用為0,那么這個對象就會被銷毀(垃圾回收機制)
注意:python中針對對象的循環(huán)引用已經(jīng)做了處理畔咧,程序員不需要寫額外的代碼來解決循環(huán)引用的問題

# 面試題:== 和 is的區(qū)別?
# 補充: is的使用 - 判斷兩個數(shù)據(jù)的地址是否一樣
list1 = [1, 2, 3]
list2 = [1, 2, 3]
list3 = list1
print(list1 == list2, list1 == list3)   # True, True
print(list1 is list2, list1 is list3)   # False, True
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末茎芭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子誓沸,更是在濱河造成了極大的恐慌梅桩,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拜隧,死亡現(xiàn)場離奇詭異宿百,居然都是意外死亡,警方通過查閱死者的電腦和手機洪添,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門犀呼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人薇组,你說我怎么就攤上這事外臂。” “怎么了律胀?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵宋光,是天一觀的道長。 經(jīng)常有香客問我炭菌,道長罪佳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任黑低,我火速辦了婚禮赘艳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘克握。我一直安慰自己蕾管,他們只是感情好,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布菩暗。 她就那樣靜靜地躺著掰曾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪停团。 梳的紋絲不亂的頭發(fā)上旷坦,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天掏熬,我揣著相機與錄音,去河邊找鬼秒梅。 笑死旗芬,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的捆蜀。 我是一名探鬼主播岗屏,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼漱办!你這毒婦竟也來了这刷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤娩井,失蹤者是張志新(化名)和其女友劉穎暇屋,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體洞辣,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡咐刨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了扬霜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片定鸟。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖著瓶,靈堂內(nèi)的尸體忽然破棺而出联予,到底是詐尸還是另有隱情,我是刑警寧澤材原,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布沸久,位于F島的核電站,受9級特大地震影響余蟹,放射性物質(zhì)發(fā)生泄漏卷胯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一威酒、第九天 我趴在偏房一處隱蔽的房頂上張望窑睁。 院中可真熱鬧,春花似錦葵孤、人聲如沸担钮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽裳朋。三九已至,卻和暖如春吓著,著一層夾襖步出監(jiān)牢的瞬間鲤嫡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工绑莺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留暖眼,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓纺裁,卻偏偏與公主長得像诫肠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子欺缘,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

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