python是動態(tài)語言

動態(tài)編程語言是高級程序設計語言的一個類別,在計算機科學領域已被廣泛應用。它是一類 在運行時可以改變其結(jié)構(gòu)的語言 :例如新的函數(shù)鹦赎、對象、甚至代碼可以被引進误堡,已有的函數(shù)可以被刪除或是其他結(jié)構(gòu)上的變化古话。動態(tài)語言目前非常具有活力。例如JavaScript便是一個動態(tài)語言锁施,除此之外如 PHP 陪踩、 Ruby 、 Python 等也都屬于動態(tài)語言悉抵,而 C 肩狂、 C++ 等語言則不屬于動態(tài)語言。
運行過程中給對象添加屬性:

class Dog(object):
    def __init__(self, name, color):
        self.name = name
        self.color = color


d1 = Dog('旺財', '黑色')
print(d1.name)
print(d1.color)
d1.brand = '哈士奇'
#print(dir(d1))    多了brand屬性
print(d1.brand)

結(jié)果如下:


對象添加屬性結(jié)果.jpg

在定義的Dog類中并沒有brand姥饰,但我們得到并打印出了這個屬性傻谁。如果我們再定義一個對象,比如d2列粪,調(diào)用d2.brand审磁,運行就會報錯谈飒,也就是我們只對d1屬性添加了brand屬性,而d2并沒有依然是Dog類中的屬性态蒂,如何在運行過程中將屬性添加到類中:

class Dog(object):
    def __init__(self, name, color):
        self.name = name
        self.color = color

Dog.brand = '京巴'

d1 = Dog('旺財', '黑色')
print(d1.name)
print(d1.color)
print(d1.brand)
print('*'*15)
d2 = Dog('小強', '白色')
print(d2.name)
print(d2.color)
print(d2.brand)

結(jié)果如下:


類添加屬性結(jié)果.jpg

可以看到杭措,通過Dog.brand = ‘京巴’,為類添加了一個brand屬性钾恢,默認值是’京巴’手素。不論是d1還是d2調(diào)用brand都會有結(jié)果。除了在運行過程中給類添加屬性瘩蚪,還可以在運行過程中給類添加方法泉懦。

class Dog(object):
    def __init__(self, name, color):
        self.name = name
        self.color = color


def eat(self):
    print('%s在吃。募舟。祠斧。' % self.name)


Dog.eat = eat

d1 = Dog('旺財', '黑色')
d1.eat()

結(jié)果如下:


類添加方法結(jié)果.jpg

既然可以給類添加方法闻察,也就可以給對象添加方法拱礁。

import types


class Dog(object):
    def __init__(self, name, color):
        self.name = name
        self.color = color


def eat(self):
    print('%s在吃。辕漂。呢灶。' % self.name)


d1 = Dog('旺財', '黑色')
d1.eat = types.MethodType(eat, d1)
d1.eat()

結(jié)果如下:


對象添加方法結(jié)果.jpg

這僅為d1這個對象添加了eat這個方法,如果創(chuàng)建一個對象d2钉嘹,d2.eat()就會報錯鸯乃。
既然可以在運行過程中添加屬性和方法,那就可以在運行過程中刪除屬性和方法跋涣。
del 對象.屬性
也可以用delattr(對象名缨睡,’屬性’)
即可刪除對象的屬性

class Dog(object):
    def __init__(self, name, color):
        self.name = name
        self.color = color


d1 = Dog('旺財', '黑色')
print(d1.name)
#del d1.name
delattr(d1, 'name')
print(d1.name)

結(jié)果如下:

刪除對象屬性結(jié)果.jpg

刪除d1.name后再打印d1.name就會報錯。
通過以上例子可以得出一個結(jié)論:相對于動態(tài)語言陈辱,靜態(tài)語言具有嚴謹性奖年!所以,玩動態(tài)語言的時候沛贪,小心動態(tài)的坑陋守!
那么怎么避免這種情況呢? 請使用slots
現(xiàn)在我們終于明白了利赋,動態(tài)語言與靜態(tài)語言的不同
動態(tài)語言:可以在運行的過程中水评,修改代碼
靜態(tài)語言:編譯時已經(jīng)確定好代碼,運行過程中不能修改
如果我們想要限制實例的屬性怎么辦媚送?比如中燥,只允許對Person實例添加name和age屬性。只能限定實例對象的添加屬性和方法塘偎,為了達到限制的目的疗涉,Python允許在定義class的時候幽纷,定義一個特殊的slots變量,來限制該class實例能添加的屬性:

class Dog:
    __slots__ = ('name', 'brand')

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


wangcai = Dog('旺財', '哈士奇')
print(wangcai.name)
print(wangcai.brand)
wangcai.color = '白色'
print(wangcai.color)

結(jié)果如下:

__slots__.jpg

使用slots要注意博敬,slots定義的屬性僅對當前類實例起作用友浸,對繼承的子類是不起作用的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末偏窝,一起剝皮案震驚了整個濱河市收恢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌祭往,老刑警劉巖伦意,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異硼补,居然都是意外死亡驮肉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門已骇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來离钝,“玉大人,你說我怎么就攤上這事褪储÷芽剩” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵鲤竹,是天一觀的道長浪读。 經(jīng)常有香客問我,道長辛藻,這世上最難降的妖魔是什么碘橘? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮吱肌,結(jié)果婚禮上痘拆,老公的妹妹穿的比我還像新娘。我一直安慰自己岩榆,他們只是感情好错负,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著勇边,像睡著了一般犹撒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上粒褒,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天识颊,我揣著相機與錄音,去河邊找鬼。 笑死祥款,一個胖子當著我的面吹牛清笨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播刃跛,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼抠艾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了桨昙?” 一聲冷哼從身側(cè)響起检号,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤脆诉,失蹤者是張志新(化名)和其女友劉穎咒吐,沒想到半個月后速侈,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體斩启,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年虑椎,在試婚紗的時候發(fā)現(xiàn)自己被綠了弟头。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片性宏。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡阁危,死狀恐怖玛痊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情欲芹,我是刑警寧澤卿啡,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布吟吝,位于F島的核電站菱父,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏剑逃。R本人自食惡果不足惜浙宜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蛹磺。 院中可真熱鬧粟瞬,春花似錦、人聲如沸萤捆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽俗或。三九已至市怎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辛慰,已是汗流浹背区匠。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留帅腌,地道東北人驰弄。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓麻汰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親戚篙。 傳聞我的和親對象是個殘疾皇子五鲫,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

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

  • python是動態(tài)語言 1.1.1動態(tài)語言的定義 動態(tài)編程語言是高級程序設計語言的一個類別,在計算機科學領域已被廣...
    chen_000閱讀 331評論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理岔擂,服務發(fā)現(xiàn)臣镣,斷路器,智...
    卡卡羅2017閱讀 134,651評論 18 139
  • 從三月份找實習到現(xiàn)在智亮,面了一些公司忆某,掛了不少,但最終還是拿到小米阔蛉、百度弃舒、阿里、京東状原、新浪聋呢、CVTE、樂視家的研發(fā)崗...
    時芥藍閱讀 42,239評論 11 349
  • 學茶藝札記(二) 綠茶及沖泡。 綠茶以新為貴毕莱,越新越好器贩。明前茶為上品,谷雨茶次之朋截,谷雨后至四月底為春茶蛹稍。綠茶名品“...
    楊帆滄州閱讀 289評論 0 0
  • 文/三月魚 1. 昨天廓八,有朋友在后臺奉芦,問我她的困惑。 原因是她一直覺得老公不夠愛她剧蹂,可是她老公卻說声功,他是愛她的,是...
    653e0adfb5bf閱讀 1,203評論 2 1