# -*- 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....