1. class X(Y)?
X-類名
Y-繼承類名
初始化:def__init__(self, attribute1, attribute2):
__init__方法的第一個參數永遠是self,表示創(chuàng)建的實例本身,因此,在__init__方法內部,就可以把各種屬性綁定到self,因為self就指向創(chuàng)建的實例本身。
2.解釋器內部會將**kw拆分成對應的dict
setattr()方法接受3個參數:setattr(對象,屬性,屬性的值)
setattr(self,k,v)相當于self.k = v
3.如果一個屬性由雙下劃線開頭(__),該屬性就無法被外部訪問。
但是,如果一個屬性以"__xxx__"的形式定義,那它又可以被外部訪問了,以"__xxx__"定義的屬性在Python的類中被稱為特殊屬性,有很多預定義的特殊屬性可以使用,通常我們不要把普通屬性用"__xxx__"定義。
以單下劃線開頭的屬性"_xxx"雖然也可以被外部訪問,但是,按照習慣,他們不應該被外部訪問。
4.綁定在一個實例上的屬性不會影響其他實例,但是,類本身也是一個對象,如果在類上綁定一個屬性,則所有實例都可以訪問類的屬性,并且,所有實例訪問的類屬性都是同一個!也就是說,實例屬性每個實例各自擁有,互相獨立,而類屬性有且只有一份。
5.當實例屬性和類屬性重名時,實例屬性優(yōu)先級高
6.
>>> getattr(s, 'name')# 獲取name屬性'Bob'
>>> setattr(s, 'name', 'Adam')# 設置新的name屬性
>>> s.name ?'Adam'
>>> getattr(s, 'age')# 獲取age屬性,但是屬性不存在,報錯:Traceback (most recent call last):? File "", line 1, in AttributeError: 'Student' object has no attribute 'age'
>>> getattr(s, 'age', 20)# 獲取age屬性,如果屬性不存在,就返回默認值20:
7.? iteritems()用于字典kw的遍歷