Python--__init__方法


一、說明

__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'

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM