廖雪峰python學習筆記9 物件導向高階

2021-07-14 19:12:42 字數 2846 閱讀 8004

# -*- coding: utf-8 -*- 

#動態語言很方便,當我們定義了乙個class的例項後

#可以給它繫結任何屬性和方法,這就是動態語言的靈活性

class student(object):

pass

#繫結各種屬性

st = student()

st.name = 'leo'

st.major = 'network engineering'

st.score = 99

#當然,也可以繫結方法

def set_age(self, age):

self.age = age

from types import methodtype

#繫結方法

st.set_age = methodtype(set_age, st)

st.set_age(19)

print(st.age)

#為了給所有例項都繫結方法,可以給class繫結方法:

def set_score(self, score = 100):

self.score = score

student.set_score = set_score

st1 = student()

st1.set_score(100)

print(st1.score)

#使用__slots__

#但是,如果我們想要限制例項的屬性怎麼辦?比如,只允許對student例項新增name和age屬性。

#python允許在定義class的時候,定義乙個特殊的__slots__變數,來限制該class例項能新增的屬性

class student(object):

__solts__ = ('name', 'age') # 用tuple定義允許繫結屬性名稱

#來來來,咱們試試

br = student()

br.name = 'name'

br.age = 19

print('%s %d' % (br.name, br.age))

br.id = 100011

print(br.id)

#如何糾錯?

#方法一

#使用raise丟擲異常

#當程式出現錯誤,python會自動引發異常,也可以通過raise顯示地引發異常。

#一旦執行了raise語句,raise後面的語句將不能執行。

class stu(object):

def get_score(self):

return self._score

def set_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

print('yes')

#方法二(@property)

#@property負責把方法變屬性

class stu(object):

@property

def score(self):

return self._score

@score.setter

def score(self, value):

if not isinstance(value, int):

raise valueerror('score must be a integer')

if value < 0 or value > 100 :

raise valueerror('score must between 0 ~ 100')

self._score = value

#這樣,就把方法轉換成了屬性

#可以這樣用

s = stu()

s.score = 60 #這裡把score方法轉換成了score屬性

print(s.score) #這裡的s.score相當於get_score

#多重繼承

class animal(object):

def speak(self):

print('i am a animal')

class runnable:

def run(self):

print('running...')

class flyable:

def fly(self):

print('flying...')

class mammal(animal):

def speak(self):

print('i am a mammal')

class bird(animal, flyable):

def speak(self):

print('i am a bird')

class bat(mammal, flyable):

def speak(self):

print('i am a bat')

class dog(mammal, runnable):

def speak(self):

print('i am a dog')

class parrot(bird, flyable):

def speak(self):

print('i am a parrot')

pa = parrot()

pa.speak()

pa.fly()

python學習筆記 廖雪峰(9 迴圈)

1 for.in迴圈,依次把list或tuple中的每個元素迭代出來,看例子 names michael bob tracy for name in names print name 2 比如range 5 生成的序列是從0開始小於5的整數 list range 5 0,1,2,3,4 3 whil...

python廖雪峰教程 學習筆記

如何用字元來描述字元 d匹配數字 digit w匹配字母或數字 word s可以匹配空格 space 表示任意個字元,表示至少乙個字元 表示0個或1個字元,表示n個字元,表示n m個字元 可以匹配任意字元 例如 kongxiangyu w如何做到更精確的匹配?規定數字 字母或者下劃線 0 9a za...

Git 廖雪峰 學習筆記

目錄 git工作區域 git初始化及倉庫建立和操作 初始化新的git倉庫 1.新建資料夾 2.在檔案內初始化git 如何將本地倉庫同步到git 遠端倉庫 1.關聯遠端庫 2.第一次推送master分支的所有內容 3.每次本地提交後,推送最新修改 轉殖 分支管理 1.建立與合併分支 2.解決衝突 3....