一、說明
__init__方法用來為對象定制自己獨有的特征
二、示例代碼如下
1 class LuffyStudent(): 2 school = 'luffycity' 3 4 def __init__(self, name, sex, age): 5 self.Name = name 6 self.Sex = sex 7 self.Age = age 8 9 def learn(self): 10 print('is learning') 11 12 def eat(self): 13 print('is eating') 14 15 def sleep(self): 16 print('is sleeping')
產生對象代碼如下:
1 stu1 = LuffyStudent('王一丫', '女', 18) # 相當於LuffyStudent.__init__(stu1,'王一丫','女',18)
加上__init__方法后,類示例化的步驟如下:
1、先產生一個空對象,stu1
2、LuffyStudent.__init__(stu1,'王一丫','女',18)
查看stu1的名稱空間:
1 print(stu1.__dict__)
結果如下:
{'Name': '王一丫', 'Sex': '女', 'Age': 18}
這就顯示為對象定制了自己獨有的特征
三、查看對象的數據屬性,代碼如下:
1 print(stu1.Name) 2 print(stu1.Sex) 3 print(stu1.Age)
結果如下:
王一丫
女
18
四、更改對象的數據屬性,代碼如下:
1 stu1.Name = '李一丫' 2 print(stu1.Name)
結果如下:
李一丫
五、刪除對象的數據屬性,代碼如下:
1 del stu1.Name 2 print(stu1.__dict__)
結果如下:
{'Sex': '女', 'Age': 18}
六、增加對象的數據屬性,代碼如下:
1 stu1.class_name = 'python開發' 2 print(stu1.__dict__)
結果如下:
{'Sex': '女', 'Age': 18, 'class_name': 'python開發'}
七、屬性查找
首先查看產生的每個對象的名稱空間,示例代碼如下:
1 class LuffyStudent(): 2 school = 'luffycity' 3 4 def __init__(self, name, sex, age): 5 self.Name = name 6 self.Sex = sex 7 self.Age = age 8 9 def learn(self): 10 print('is learning') 11 12 def eat(self): 13 print('is eating') 14 15 def sleep(self): 16 print('is sleeping') 17 18 stu1 = LuffyStudent('王一丫', '女', 18) 19 stu2 = LuffyStudent('王二丫', '男', 28) 20 stu3 = LuffyStudent('王三丫', '男', 38) 21 22 print(stu1.__dict__) 23 print(stu2.__dict__) 24 print(stu3.__dict__)
結果如下:
{'Name': '王一丫', 'Sex': '女', 'Age': 18}
{'Name': '王二丫', 'Sex': '男', 'Age': 28}
{'Name': '王三丫', 'Sex': '男', 'Age': 38}
類中的數據屬性: 是所有對象共有的
示例代碼如下:
1 print(LuffyStudent.school) 2 print(stu1.school) 3 print(stu2.school) 4 print(stu3.school)
結果如下:
luffycity
luffycity
luffycity
luffycity
都能夠訪問類中的數據屬性,school
1 print(LuffyStudent.school, id(LuffyStudent.school)) 2 print(stu1.school, id(stu1.school)) 3 print(stu2.school, id(stu2.school)) 4 print(stu3.school, id(stu3.school))
結果:
luffycity 3016506040048
luffycity 3016506040048
luffycity 3016506040048
luffycity 3016506040048
從以上結果可以看出,訪問的是同一塊內存地址
八、類中的函數屬性:是綁定給對象,綁定到不同的對象是使用不同的綁定方法
從以下代碼和結果可以看出,代碼如下:
1 print(LuffyStudent.learn) 2 print(stu1.learn) 3 print(stu2.learn) 4 print(stu3.learn)
結果如下:
<function LuffyStudent.learn at 0x000001764D5DB730>
<bound method LuffyStudent.learn of <__main__.LuffyStudent object at 0x000001764D5DE160>>
<bound method LuffyStudent.learn of <__main__.LuffyStudent object at 0x000001764D5DE1D0>>
<bound method LuffyStudent.learn of <__main__.LuffyStudent object at 0x000001764D5DE208>>
1 def learn(self): 2 print('%s is learning' % self.Name) 3 4 LuffyStudent.learn(stu1) 5 LuffyStudent.learn(stu2) 6 LuffyStudent.learn(stu3)
以上代碼輸出結果為:
王一丫 is learning
王二丫 is learning
王三丫 is learning
會自動把對象自身傳入
稍作更改代碼后如下所示:
1 def learn(self, x): 2 print('%s is learning %s' % (self.Name, x)) 3 4 stu1.learn(1) 5 stu2.learn(2) 6 stu3.learn(3)
結果如下:
王一丫 is learning 1
王二丫 is learning 2
王三丫 is learning 3
屬性查找范圍,會先從從類中查找,然后又從父類中查找,依次往上查找,但不會從全局變量中查找,代碼驗證如下:
1 LuffyStudent.x = 'from Luffycity class' 2 print(stu1.__dict__) 3 print(stu1.x)
驗證結果:
{'Name': '王一丫', 'Sex': '女', 'Age': 18}
from Luffycity class
把1 LuffyStudent.x = 'from Luffycity class' 這行代碼注釋后,
再執行就會報錯,AttributeError: 'LuffyStudent' object has no attribute 'x'