Python學(xué)習(xí)(3)

本系列內(nèi)容來源于 廖雪峰的Python教程 點擊查看原文

面向?qū)ο?/p>

訪問限制

class Message:
    def __init__(self, id, content):
        self._id = id;
        self._content = content;

變量名以 __開頭  如__id  展东。都是私有變量,外部一般不能訪問

繼承,多態(tài)請自行查看

點這

獲取對象信息

>>> type(123)
<class 'int'>
>>> type('str')
<class 'str'>
>>> type(None)
<type(None) 'NoneType'>

>>> type(123)==type(456)
True
>>> type(123)==int
True
>>> type('abc')==type('123')
True
>>> type('abc')==str
True
>>> type('abc')==type(123)
False

對于class的繼承關(guān)系來說,使用type()就很不方便巷嚣。我們要判斷class的類型柄沮,可以使用isinstance()函數(shù)。

列出和操作對象的狀態(tài)


class MyObject(object):

    def __init__(self):
        self.x = 9
    def power(self):
        return self.x * self.x

obj = MyObject()


列出:
>>> dir(obj)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'power', 'x']

測試
>>> hasattr(obj, 'x') # 有屬性'x'嗎县袱?
True
>>> obj.x
9
>>> hasattr(obj, 'y') # 有屬性'y'嗎?
False
>>> setattr(obj, 'y', 19) # 設(shè)置一個屬性'y'
>>> hasattr(obj, 'y') # 有屬性'y'嗎佑力?
True
>>> getattr(obj, 'y') # 獲取屬性'y'
19
>>> obj.y # 獲取屬性'y'
19

實例屬性和類屬性

  • 1 給一個實例綁定一個實例變量
class Student(object):

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

s = Student('Alice')

s.age = 10   #動態(tài)給一個實例綁定變量

  • 2 類屬性
class Student(object):
    name = "Student"

>>> s = Student() # 創(chuàng)建實例s
>>> print(s.name) # 打印name屬性式散,因為實例并沒有name屬性,所以會繼續(xù)查找class的name屬性
Student
>>> print(Student.name) # 打印類的name屬性
Student
>>> s.name = 'Michael' # 給實例綁定name屬性
>>> print(s.name) # 由于實例屬性優(yōu)先級比類屬性高打颤,因此暴拄,它會屏蔽掉類的name屬性
Michael
>>> print(Student.name) # 但是類屬性并未消失,用Student.name仍然可以訪問
Student
>>> del s.name # 如果刪除實例的name屬性
>>> print(s.name) # 再次調(diào)用s.name编饺,由于實例的name屬性沒有找到乖篷,類的name屬性就顯示出來了
Student

使用slots:給類綁定屬性和方法

一般綁定屬性

class Studeng():
    pass
>> s = Studeng()
>> s.name = "haha" # 動態(tài)給實例綁定一個屬性
>> print(s.name)

一般綁定方法

>>> def set_name(self,name):  #定義一個方法
    self.name = name;

>>> s = Student()
>>> s.set_name = MethodType(set_name,s) #給實例綁定一個方法
>>> s.set_name("haha")
>>> s.name
'haha'

#給類綁定方法
>>> def set_score(self, score):
        self.score = score
>>> Student.set_score = set_score

使用__slots__綁定

class User(object):
    __slots__ = ('name','age') #用tuple定義允許綁定的屬性名稱


>>> s = User()
>>> s.name = 'haha'
>>> s.age = '22'
>>> s.score = 100
Traceback (most recent call last):
  File "<pyshell#22>", line 1, in <module>
    s.score = 100
AttributeError: 'User' object has no attribute 'score'

注:__slots__定義的屬性僅對當(dāng)前類實例起作用,對繼承的子類是不起作用的透且,除非在子類中也定義__slots__

使用@property

更簡單的getter setter ,@property裝飾器就是負(fù)責(zé)把一個方法變成屬性

class Student(object):

    @property
    def score(self):
        return self._score

    @score.setter
    def score(self, value):
        if not isinstance(value, int):
            raise ValueError('score must be an integer!')
        if value < 0 or value > 100:
            raise ValueError('score must between 0 ~ 100!')
        self._score = value

     @property
    def age(self):
        return 2015 - self._birth

    ---------------------------------------------------
    @property 就是把一個方法轉(zhuǎn)變?yōu)橐粋€屬性,屬于getter方法撕蔼。
    @ .setter 也是把一個方法轉(zhuǎn)變?yōu)橐粋€屬性,屬于setter方法

    只有@property 是一個只讀屬性。代碼里面的age方法
    


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末石蔗,一起剝皮案震驚了整個濱河市罕邀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌养距,老刑警劉巖诉探,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異棍厌,居然都是意外死亡肾胯,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門耘纱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來敬肚,“玉大人,你說我怎么就攤上這事束析⊙蘼” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長弄慰。 經(jīng)常有香客問我第美,道長,這世上最難降的妖魔是什么陆爽? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任什往,我火速辦了婚禮,結(jié)果婚禮上慌闭,老公的妹妹穿的比我還像新娘别威。我一直安慰自己,他們只是感情好驴剔,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布省古。 她就那樣靜靜地躺著,像睡著了一般仔拟。 火紅的嫁衣襯著肌膚如雪衫樊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天利花,我揣著相機(jī)與錄音,去河邊找鬼载佳。 笑死炒事,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蔫慧。 我是一名探鬼主播挠乳,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼姑躲!你這毒婦竟也來了睡扬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤黍析,失蹤者是張志新(化名)和其女友劉穎卖怜,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阐枣,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡马靠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蔼两。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片甩鳄。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖额划,靈堂內(nèi)的尸體忽然破棺而出妙啃,到底是詐尸還是另有隱情,我是刑警寧澤俊戳,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布揖赴,位于F島的核電站馆匿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏储笑。R本人自食惡果不足惜甜熔,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望突倍。 院中可真熱鬧腔稀,春花似錦、人聲如沸羽历。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秕磷。三九已至诵闭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間澎嚣,已是汗流浹背疏尿。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留易桃,地道東北人褥琐。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像晤郑,于是被迫代替她去往敵國和親敌呈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348

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

  • Python進(jìn)階框架 希望大家喜歡造寝,點贊哦首先感謝廖雪峰老師對于該課程的講解 一磕洪、函數(shù)式編程 1.1 函數(shù)式編程簡...
    Gaolex閱讀 5,493評論 6 53
  • 要點: 函數(shù)式編程:注意不是“函數(shù)編程”,多了一個“式” 模塊:如何使用模塊 面向?qū)ο缶幊蹋好嫦驅(qū)ο蟮母拍罱肓傩浴?..
    victorsungo閱讀 1,476評論 0 6
  • 1. 字符串 Python中的字符串可以用雙引號"也可以用單引號'引起來析显。另外也可以使用反斜杠進(jìn)行轉(zhuǎn)義。 拼接字符...
    ZzzsWszzZ閱讀 457評論 0 0
  • 今天把數(shù)字弄了 下面赐稽,完成大大的作業(yè)叫榕,順便記錄一下解析 1.輸入import this,會有指導(dǎo)原則 2.變量后面...
    lia同學(xué)閱讀 265評論 0 0
  • 定義類并創(chuàng)建實例 在Python中,類通過 class 關(guān)鍵字定義姊舵。以 Person 為例晰绎,定義一個Person類...
    績重KF閱讀 3,930評論 0 13