python面向?qū)ο螅ǘ?/h1>
元類

python中,對(duì)象是由元類創(chuàng)建的易遣,類也是一種對(duì)象彼妻,也就是說元類就是‘類的類’
eg、電腦中的cpu、內(nèi)存等等侨歉。cpu屋摇、內(nèi)存相當(dāng)是x。
https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386820064557c69858840b4c48d2b8411bc2ea9099ba000

內(nèi)置函數(shù)
內(nèi)置函數(shù) 描述
issubclass(sub, sup) 如果類 sub 是類 sup 的子類幽邓,則返回 True炮温,反之,為 False
isinstance(obj1, obj2) 如果實(shí)例obj1是類obj2或者obj2子類的一個(gè)實(shí)例牵舵;或者如果obj1 是 obj2 的類型柒啤,則返回 True;反之畸颅,為 False担巩。
hasattr(obj, attr) 如果 obj 有屬性 attr(用字符串給出),返回 True没炒,反之涛癌,返回
getattr(obj, attr[, default]) 獲取 obj 的 attr 屬性;與返回 obj.attr 類似送火;如果 attr 不是 obj 的屬性拳话,如果提供了默認(rèn)值,則返回默認(rèn)值种吸;不然假颇, 就會(huì)引發(fā)一個(gè) AttributeError 異
setattr(obj, attr, val) 設(shè)置obj的attr屬性值為val,替換任何已存在的屬性值骨稿; 不然,就創(chuàng)建屬性姜钳;類似于 obj.attr=val
delattr(obj, attr) 從 obj 中刪除屬性 attr(以字符串給出)坦冠;類似于 del obj.attr
dir(obj=None) 返回 obj 的屬性的一個(gè)列表;如果沒有給定 obj哥桥,dir()則顯示局部名字空間空間中的屬性辙浑,也就是 locals().keys()
super(type, obj=None) 返回一個(gè)表示父類類型的代理對(duì)象;如果沒有傳入 obj拟糕, 則返 回的 super 對(duì)象是非綁定的判呕;反之,如果 obj 是一個(gè) type 送滞, issubclass(obj,type) 必 為 True 侠草; 否 則 , isinstance(obj,type)就必為 True
vars(obj=None) 返回 obj 的屬性及其值的一個(gè)字典犁嗅;如果沒有給出 obj边涕, vars()顯示局部名字空間字典(屬性及其值),也就是 locals()。

常用的一些方法實(shí)例

class A(object):
   def __init__(self,):
       print( 'create an instance of',self.__class__.__name__)
   @property
   def name(self):
       return self.__name
   @name.setter
   def name(self,__value):
       self.__name = __value

   def show(self):
       print(self.__name )
class B(A):
    pass
b= B()
a= A()
a.name = "limei"
print(a.show())
# 判斷是否是子類
print(issubclass(B,A))
# 判斷是否是實(shí)例或者子類的實(shí)例功蜓。是返回true园爷,不是返回false。
print(isinstance(b,A))
print(hasattr(B,"name"))
定制類

python中有很多有特殊用途的函數(shù)式撼,可用于擴(kuò)充類童社。
實(shí)現(xiàn): 1、模擬標(biāo)準(zhǔn)類型 2著隆、重載操作符
**用來定制類的特殊方法 **
(http://blog.csdn.net/fdl19881/article/details/8443893)
以下只是部分扰楼,詳細(xì)看上面鏈接

內(nèi)置函數(shù) 描述
init 構(gòu)造器(帶一些可選的參數(shù))
new 構(gòu)造器
del 構(gòu)造器
str 可打印的字符輸出;內(nèi)建 str()及 print 語句
repr 運(yùn)行時(shí)的字符串輸出(用于調(diào)試)
unicode Unicode 字符串輸出
call 表示可調(diào)用的實(shí)例
nonzero 為object 定義 False 值 旅东;內(nèi)置bool()
len “長度”(可用于類)灭抑;內(nèi)建 len()
cmp 對(duì)象比較;內(nèi)建 cmp()
lt 小于/小于或等于抵代;對(duì)應(yīng)<及<=操作符
gt 大于/大于或等于腾节;對(duì)應(yīng)>及>=操作符
eq 等于/不等于;對(duì)應(yīng)==,!=及<>操作符
C.*add(self, obj) 加荤牍;+操作符
C.*sub(self, obj) 減案腺;-操作符
C.*mul(self, obj) 乘;*操作符
C.*div(self, obj) 除康吵;/操作符

新式類的常用法的解釋

 __init__    創(chuàng)建完對(duì)象后調(diào)用劈榨,對(duì)當(dāng)前對(duì)象的實(shí)例的一些初始化
__new__(cls, *args, **kwargs)  創(chuàng)建對(duì)象時(shí)調(diào)用,返回當(dāng)前對(duì)象的一個(gè)實(shí)例晦嵌,只有在新式類的情況下才會(huì)有的方法

new的作用
1同辣、主要是當(dāng)你繼承一些不可變的class時(shí)(比如int, str, tuple), 提供給你一個(gè)自定義這些類的實(shí)例化過程的途徑惭载。還有就是實(shí)現(xiàn)自定義的metaclass
2旱函、因?yàn)轭惷恳淮螌?shí)例化后產(chǎn)生的過程都是通過__new__來控制的,所以通過重載__new__方法描滔,我們 可以很簡單的實(shí)現(xiàn)單例模式棒妨。

class Singleton(object):
    def __new__(cls):
        # 關(guān)鍵在于這,每一次實(shí)例化的時(shí)候含长,我們都只會(huì)返回這同一個(gè)instance對(duì)象
        if not hasattr(cls, 'instance'):
            cls.instance = super(Singleton, cls).__new__(cls)
        return cls.instance
obj1 = Singleton()
obj2 = Singleton()
obj1.attr1 = 'value1'
print obj1.attr1, obj2.attr1
print obj1 is obj2
__call__
一個(gè)對(duì)象實(shí)例可以有自己的屬性和方法券腔,當(dāng)我們調(diào)用實(shí)例方法時(shí),我們用instance.method()來調(diào)用拘泞。能不能直接在

class Student(object):
    def __init__(self, name):
        self.name = name
    def __call__(self):
        print('My name is %s.' % self.name)

輸出:
>>> s = Student('Michael')
>>> s()
My name is Michael.
__str__(重新定制打印方式)
class A(object):
    @property
    def name(self):
       return self.__name
    @name.setter
    def name(self,__value):
        self.__name = __value
    def __str__(self):
        return "this is student name is {0}".format(self.__name)
a=A()
a.name="test"
print(a)

輸出如下:
this is student name is test
__iter__(返回迭代對(duì)象纷纫,用于 for in方法)
__getslice__、__setslice__田弥、__delslice__(切片方法)
閉包(閉包(closure)是函數(shù)式編程的重要的語法結(jié)構(gòu))

閉包構(gòu)成是:一個(gè)函數(shù)與他的環(huán)境變量結(jié)合涛酗,在Python中,所謂的閉包是一個(gè)包含有環(huán)境變量取值的函數(shù)對(duì)象。

def line_conf():
    b = 15
    def line(x):
        return 2*x+b
    return line    
my_line = line_conf()
print(my_line(5))       

分析:我們可以看到商叹,line定義的隸屬程序塊中引用了高層級(jí)的變量b燕刻,但b信息存在于line的定義之外 (b的定義并不在line的隸屬程序塊中)。我們稱b為line的環(huán)境變量剖笙。事實(shí)上卵洗,line作為line_conf的返回值時(shí),line中已經(jīng)包括b的取值(盡管b并不隸屬于line)弥咪。

裝飾器

python中一切都是對(duì)象过蹂,函數(shù)也是對(duì)象,因而可以當(dāng)成參數(shù)傳遞聚至。
裝飾模式就是在調(diào)用目標(biāo)函數(shù)之前酷勺,對(duì)這個(gè)函數(shù)隊(duì)形進(jìn)行裝飾。
最簡單的裝飾模式如下:

def say_english():
    print("hello")
def greet(say):
    print("英語的你好怎么輸出")
    say()
    print("了解了嗎")
greet(say_english)

greet方法就是把say_English方法修飾扳躬。
輸入如下:

英語的你好怎么輸出
hello
了解了嗎

如果把項(xiàng)目上的say_english()脆诉,都需要改為這樣格式的輸出,則需要把項(xiàng)目中的say_english()改為greet(say_english)這個(gè)方法贷币,這樣子需要大量的工程或者會(huì)改漏击胜,為了調(diào)用say_english()也能達(dá)到greet(say_english),則修改如下:

def say_english():
    print("hello")
def greet(say):
    def wrapper():
        print("英語的你好怎么輸出")
        say()
        print("了解了嗎")
    return wrapper
say_english = greet(say_english)
say_english()

python中一切都是對(duì)象役纹,那么greet()函數(shù)return的是wrapper的對(duì)象偶摔。

###語法糖@(python2.4之后才會(huì)出現(xiàn))
python中@相當(dāng)于 say_english = greet(say_english) 這句,修改如下:

def greet(say):
    def wrapper():
        print("英語的你好怎么輸出")
        say()
        print("了解了嗎")
    return wrapper

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

  • 序言:七十年代末促脉,一起剝皮案震驚了整個(gè)濱河市辰斋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瘸味,老刑警劉巖亡呵,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異硫戈,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)下硕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門丁逝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人梭姓,你說我怎么就攤上這事霜幼。” “怎么了誉尖?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵罪既,是天一觀的道長。 經(jīng)常有香客問我,道長琢感,這世上最難降的妖魔是什么丢间? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮驹针,結(jié)果婚禮上烘挫,老公的妹妹穿的比我還像新娘。我一直安慰自己柬甥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著人乓,像睡著了一般筑煮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上臂外,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天窟扑,我揣著相機(jī)與錄音,去河邊找鬼寄月。 笑死辜膝,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的漾肮。 我是一名探鬼主播厂抖,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼克懊!你這毒婦竟也來了忱辅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤谭溉,失蹤者是張志新(化名)和其女友劉穎墙懂,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扮念,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡损搬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了柜与。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片巧勤。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖弄匕,靈堂內(nèi)的尸體忽然破棺而出颅悉,到底是詐尸還是另有隱情,我是刑警寧澤迁匠,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布剩瓶,位于F島的核電站驹溃,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏延曙。R本人自食惡果不足惜豌鹤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望搂鲫。 院中可真熱鬧傍药,春花似錦、人聲如沸魂仍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽擦酌。三九已至俱诸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赊舶,已是汗流浹背睁搭。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留笼平,地道東北人园骆。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像寓调,于是被迫代替她去往敵國和親锌唾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

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

  • 兩本不錯(cuò)的書: 《Python參考手冊(cè)》:對(duì)Python各個(gè)標(biāo)準(zhǔn)模塊夺英,特性介紹的比較詳細(xì)晌涕。 《Python核心編程...
    靜熙老師哈哈哈閱讀 3,359評(píng)論 0 80
  • 教程地址:python進(jìn)階 - 慕課網(wǎng) python函數(shù)式編程 變量可以指向函數(shù): f = absprint(f)...
    竹口小生閱讀 547評(píng)論 0 2
  • 本文為《爬著學(xué)Python》系列第四篇文章。從本篇開始痛悯,本專欄在順序更新的基礎(chǔ)上余黎,會(huì)有不規(guī)則的更新。 在Pytho...
    SyPy閱讀 2,493評(píng)論 4 11
  • 今早兒子八點(diǎn)二十才從家里出發(fā)去補(bǔ)習(xí)载萌,第一堂課是英語惧财,兒子不想上,原因是老師喜歡拖堂扭仁,布置作業(yè)又多可缚,說班上很多同學(xué)都...
    不忘初心堅(jiān)持到底閱讀 124評(píng)論 -1 3
  • 以前,我每次看見覺得有意思有意義的東西斋枢,就想發(fā)朋友圈,自我感覺 因?yàn)橛涗?因?yàn)榉窒怼?然而知给, 不懂你的人瓤帚,什么事情...
    妖嬈記閱讀 122評(píng)論 0 1