(未完)
1.建立例項的時候,需要定義乙個特殊的__init__方法,而且它的第乙個引數永遠是self,表示建立的例項本身。因此,在__init__方法內部,就可以把各種屬性繫結到self,因為self就指向建立的例項本身。
>>
>
class
student
(object):
...def
__init__
(self,name,score):.
.. self.name=name..
. self.score=score
定義了__init__後,建立例項的時候就不能傳入空參,除了self外,其它引數必須與__init__匹配
2.在python中,變數如果以兩個下劃線開頭,那這個變數就變成了乙個私有變數 如:
class
student
(object):
def__init__
(self,name,score)
: self.__name=name
self.__score=score
defprint_score
(self)
:print
('%s:%s'
%(self.__name,self.__name)
)
3.在外部直接設定物件的屬性與用setter方法設定物件屬性相比,缺點在於前者不能設定一些語句對傳入的值進行判斷,不能防止被傳入惡意的值。
4.以雙劃線開頭+結尾的變數是特殊變數,比如__***__,是可以直接訪問的。
5.判斷物件的型別:使用type()函式:
>>
>
type
(123
)<
class
'int'
>
>>
>
6.可以使用dir()獲取乙個物件的所有屬性和方法:
>>
>
dir(
'123')[
'__add__'
,'__class__'
,'__contains__'
,'__delattr__'
,'__dir__'
,'__doc__'
,'__eq__'
,'__format__'
,'__ge__'
,'__getattribute__'
,'__getitem__'
,'__getnewargs__'
,'__gt__'
,'__hash__'
,'__init__'
,'__init_subclass__'
,'__iter__'
,'__le__'
,'__len__'
,'__lt__'
,'__mod__'
,'__mul__'
,'__ne__'
,'__new__'
,'__reduce__'
,'__reduce_ex__'
,'__repr__'
,'__rmod__'
,'__rmul__'
,'__setattr__'
,'__sizeof__'
,'__str__'
,'__subclasshook__'
,'capitalize'
,'casefold'
,'center'
,'count'
,'encode'
,'endswith'
,'expandtabs'
,'find'
,'format'
,'format_map'
,'index'
,'isalnum'
,'isalpha'
,'isascii'
,'isdecimal'
,'isdigit'
,'isidentifier'
,'islower'
,'isnumeric'
,'isprintable'
,'isspace'
,'istitle'
,'isupper'
,'join'
,'ljust'
,'lower'
,'lstrip'
,'maketrans'
,'partition'
,'replace'
,'rfind'
,'rindex'
,'rjust'
,'rpartition'
,'rsplit'
,'rstrip'
,'split'
,'splitlines'
,'startswith'
,'strip'
,'swapcase'
,'title'
,'translate'
,'upper'
,'zfill'
]
類似__***__的屬性和方法在python中都是有特殊用途的,比如__len__方法返回長度。在python中,如果呼叫len()函式試圖獲取乙個物件的長度,在這個函式的內部,它會自動呼叫該物件的__len__()方法。對於我們自己寫的類,如果也想呼叫len(object),就得自己寫乙個__len__()方法。
7.編寫程式的時候不要把例項屬性和類屬性使用相同的名字,因為相同名稱的例項屬性會遮蔽掉類屬性,但是把例項屬性刪掉以後,再使用相同的名稱,還是可以訪問類屬性。
8.多型: 對於乙個變數,我們只需要知道它是某個型別,無序確切知道它的子型別,就可以放心地呼叫它的方法,而具體呼叫的run()方法是作用在父類還是在其它子類上,由執行時該物件的確切型別決定。多型的威力體現在:呼叫方只管呼叫,不用管細節。
p190的練習題: 請利用@property給乙個screen物件加上width和height屬性,以及乙個唯讀屬性resolution:
class
screen
(object):
@property
#這種裝飾器就是負責把乙個方法變成屬性呼叫的
defwidth
(self)
:return self._width
@width.setter
defwidth
(self,width)
: self._width=width
@property
defheight
(self)
:return self._height
@width.setter
defheight
(self,height)
: self._height=height
@property
defresolution
(self)
:return self._width*self._height
s=screen(
)s.width=
1024
s.height=
768print
(s.resolution)
assert s.resolution==
786432
,'1024*768=%d?'
%s.resolution
#這裡assert是乙個異常處理語句,它的標準格式為:assert expression1 [',' 語句]
#方框裡的語句可選,用於報告錯誤。如果expression1值為假,那麼會輸出方框裡語句的內容
執行結果:
python學習3(廖雪峰教程) 函式
1.函式定義 依次寫出函式名 括號 括號中的引數和冒號 然後,在縮排塊中編寫函式體,函式的返回值用return語句返回。def my abs x if x 0 return x else return x如果想定義乙個什麼事也不做的空函式,可以用pass語句 def nop passpass語句什麼...
廖雪峰python3教程筆記(迭代器)
2.使用isinstance判斷乙個物件是否是迭代器 isinstance x for x in range 11 iterator true isinstance iterator false3.iterator物件表示得是乙個資料流,我們可以把這個資料流看作乙個有序序列,但卻不能提前知道序列得長...
python廖雪峰教程 學習筆記
如何用字元來描述字元 d匹配數字 digit w匹配字母或數字 word s可以匹配空格 space 表示任意個字元,表示至少乙個字元 表示0個或1個字元,表示n個字元,表示n m個字元 可以匹配任意字元 例如 kongxiangyu w如何做到更精確的匹配?規定數字 字母或者下劃線 0 9a za...