Day014 - Linux-Vim(2)(2018-11-17)

find /etc -name "*.conf" -> 在etc目錄下面查找conf文件
grep -> 查找字符串

面向?qū)ο笏拇笾е撼橄蟆⒎庋b、繼承、多態(tài)

抽象 - 定義類(lèi)的過(guò)程就是提取共性的抽象過(guò)程
數(shù)據(jù)抽象 - 找到對(duì)象的靜態(tài)特征 - 屬性 - 找名詞
行為抽象 - 找到對(duì)象的動(dòng)態(tài)特征 - 方法 - 找動(dòng)詞

封裝 - 將數(shù)據(jù)和操作數(shù)據(jù)的方法從邏輯上組成一個(gè)整體 - 對(duì)象
隱藏實(shí)現(xiàn)細(xì)節(jié) 暴露簡(jiǎn)單的調(diào)用接口

繼承 - 從已有的類(lèi)創(chuàng)建新類(lèi)的過(guò)程
提供繼承信息的稱(chēng)之為父類(lèi),得到繼承信息的稱(chēng)之為子類(lèi)

多態(tài) - 調(diào)用相同的方法,做了不同的事情
同樣的方法在運(yùn)行時(shí)表現(xiàn)出不同的行為
子類(lèi)重寫(xiě)父類(lèi)方法,不同的子類(lèi)給出不同的實(shí)現(xiàn)版本

抽象類(lèi):在抽象類(lèi)中聲明的抽象方法必須要在子類(lèi)中實(shí)現(xiàn),抽象方法不能被繼承

 class Employee(object, metaclass=ABCMeta):
 
    @abstractmethod
    def ……

查找替換:
/ 進(jìn)入末行模式,輸入查找內(nèi)容 小寫(xiě)n往下搜索,大寫(xiě)N往上搜索
:1,$ 從第一行到最后一行
:1,$s/self/shit 從第一行到最后一行,找到self替換成shit (s:substitute)
:1,$s/self/shit/c 從第一行到最后一行,找到self替換成shit,并需要進(jìn)行確認(rèn)
:1,$s/self/shit/ci 從第一行到最后一行,找到self替換成shit,并需要進(jìn)行確認(rèn),同時(shí)忽略大小寫(xiě)(i:ignore case)

名詞:撲克 玩家 牌
動(dòng)詞:洗牌 發(fā)牌 摸牌

類(lèi)和類(lèi)之間(對(duì)象之間)的關(guān)系:

  1. is-a關(guān)系 - 繼承
  2. has-a關(guān)系 - 關(guān)聯(lián)(學(xué)生有筆記本電腦)/聚合/合成 ((強(qiáng)關(guān)聯(lián))小汽車(chē)有引擎:聚合或者合成)
  3. use-a關(guān)系 - 依賴(lài)

面向?qū)ο笃邆€(gè)設(shè)計(jì)原則:

1.單一職責(zé)原則 - 一個(gè)類(lèi)只做該做的事情,不做不該做的事情
2.開(kāi)閉原則
3.依賴(lài)倒轉(zhuǎn)原則
4.里氏替換原則
5.接口隔離原則
6.合成聚合復(fù)用原則 - 優(yōu)先考慮強(qiáng)關(guān)聯(lián)關(guān)系而不是繼承關(guān)系來(lái)復(fù)用代碼
7.最少知識(shí)原則(迪米特法則)

設(shè)計(jì)模式:
GoF設(shè)計(jì)模式(23種經(jīng)典場(chǎng)景,有17種在python中被弱化了(因?yàn)槭莿?dòng)態(tài)弱類(lèi)型語(yǔ)言))

!經(jīng)驗(yàn): 符號(hào)常量?jī)?yōu)于字面常量,枚舉類(lèi)型是定義符號(hào)常量的最佳選擇
SPADE.value可以取到常量的值,Suite是可以迭代的類(lèi)型

class Suite(Enum):
     SPADE = 0
     HEART = 1
     CLUB = 2
     DIAMOND = 3

__repr__:
對(duì)象作為列表的元素時(shí),打印自動(dòng)調(diào)用__repr__

def func1(a, *, key='')
*前面的參數(shù)稱(chēng)為位置參數(shù)(傳參時(shí)不用指定參數(shù)名,按位置對(duì)號(hào)入座即可)
*后面的參數(shù)稱(chēng)為命名關(guān)鍵字參數(shù)(傳參時(shí)必須給出參數(shù)名和參數(shù)值)

工資結(jié)算系統(tǒng):

#!/usr/bin/python3
from abc import ABCMeta, abstractmethod


class Employee(object, metaclass=ABCMeta):

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

    @abstractmethod
    def get_salary(self):
        pass


class Manager(Employee):

    def get_salary(self):
        return 15000


class Programmer(Employee):

    def __init__(self, name):
        self.working_hour = 0
        super().__init__(name)

    def get_salary(self):
        return 200 * self.working_hour


class Salesman(Employee):
    """銷(xiāo)售員"""

    def __init__(self, name):
        self.sales = 0
        super().__init__(name)

    def get_salary(self):
        return 1800 + self.sales * 0.05


def main():
    emps = [
        Manager('曹操'), Programmer('荀彧'),
        Programmer('郭嘉'),  Salesman('張遼')
    ]
    for emp in emps:
        if isinstance(emp, Programmer):
            hour = int(input(f'請(qǐng)輸入{emp.name}本月工時(shí):'))
            emp.working_hour = hour
        elif isinstance(emp, Salesman):
            sales = float(input(f'請(qǐng)輸入{emp.name}本月銷(xiāo)售額:'))
            emp.sales = sales
        print(f'{emp.name}本月工資為:{emp.get_salary()}元')


if __name__ == '__main__':
    main()

撲克游戲:

#!/usr/bin/python3
from enum import Enum, unique
import random


# 經(jīng)驗(yàn): 符號(hào)常量?jī)?yōu)于字面常量,枚舉類(lèi)型是定義符號(hào)常量的最佳選擇
# SPADE.value可以取到常量的值,Suite是可以迭代的類(lèi)型
@unique
class Suite(Enum):
    """花色的枚舉"""
    
    SPADE = 0
    HEART = 1
    CLUB = 2
    DIAMOND = 3


class Card(object):

    def __init__(self, suite, face):
        self.suite = suite
        self.face = face

    def show(self):
        suites = ['黑', '紅', '梅', '方']
        faces = [
            '', 'A', '2', '3', '4', '5', '6',
            '7', '8', '9', '10', 'J', 'Q', 'K'
        ]
        return f'{suites[self.suite.value]}{faces[self.face]}'

    def __str__(self):
        return self.show()

    def __repr__(self):
        return self.show()

    """
    def __gt__(self, other):
        if self.suite == other.suite:
            return self.face > other.face
        return self.suite.value > other.suite.value
    """

class Poker:
    
    def __init__(self):
        self.index = 0
        # 生成式/推導(dǎo)式
        self.cards = [Card(suite, face)
                        for suite in Suite
                        for face in range(1, 14)]

    def shuffle(self):
        """洗牌"""
        random.shuffle(self.cards) 

    def deal(self):
        """發(fā)牌"""
        card = self.cards[self.index]
        self.index += 1
        return card

    @property
    def has_more(self):
        """是否還有更多的牌"""
        return self.index < len(self.cards)


class Player(object):
    """玩家(與牌既有關(guān)聯(lián)關(guān)系,又有依賴(lài)關(guān)系)"""

    def __init__(self, name):
        self.name = name
        self.cards = []

    def get_one(self, card):
        """摸一張牌"""
        self.cards.append(card)

    def sort_cards(self, key=lambda card: (card.suite.value, card.face)):
        """玩家整理手上的牌"""
        self.cards.sort(key=key)


def main():
    poker = Poker()
    poker.shuffle()
    print(poker.cards)
    players = [Player('東邪'), Player('西毒'), Player('南帝'), Player('北丐')]
    for _ in range(13):
        for player in players:
            player.get_one(poker.deal())
    for player in players:
        player.sort_cards(key=lambda card: (card.face, card.suite.value))
        print(player.name, end=': ')
        print(player.cards)


if __name__ == '__main__':
    main()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,362評(píng)論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,577評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 178,486評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,852評(píng)論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,600評(píng)論 6 412
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,944評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,944評(píng)論 3 447
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 43,108評(píng)論 0 290
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,652評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,385評(píng)論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,616評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,111評(píng)論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,798評(píng)論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 35,205評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,537評(píng)論 1 295
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,334評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,570評(píng)論 2 379

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

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類(lèi)型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,130評(píng)論 1 32
  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時(shí)...
    歐辰_OSR閱讀 29,508評(píng)論 8 265
  • 不被理解是一種怎么樣的孤獨(dú),像剛從溫室跌進(jìn)一個(gè)無(wú)盡寒冬里,所有原本的棱角都頃刻磨碎········ 夜已深了,大概...
    小鐘鐘同學(xué)閱讀 951評(píng)論 0 0
  • 我發(fā)現(xiàn)人有時(shí)候是不長(zhǎng)記性的,明知道那條路不好走,甚至根本就是一條錯(cuò)路,但是還是一腳踏進(jìn)去,最后傷痕累累的出來(lái),然而...
    纓Beryl閱讀 377評(píng)論 0 0
  • M: Honey, here is a bottle,one side is small, let's play ...
    大小豆豆MM閱讀 392評(píng)論 0 0