Python 物件導向介紹

屈逸發表於2018-08-19
一、類的例項化:呼叫類產生物件的過程稱為類的例項化,例項化的結果是一個物件,或稱為一個例項
1 class People:
2     def __init__(self,name,age,sex):
3         self.name=name
4         self.age=age
5         self.sex=sex
6 
7     def run(self):
8         print(`%s is running` %self.name)

例項化做了三件事
1、先產生一個空物件
2、自動觸發類內部__init__函式的執行
3、將空物件,以及呼叫類括號內傳入的引數,一同傳給__init__,為物件定製獨有的屬性
 obj=People(`egon`,18,`male`) #People.__init__(obj,`egon`,18,`male`)
 會產生物件的名稱空間,如何檢視
 print(obj.__dict__)

二;物件的操作
1  print(obj.name) #obj.__dict__
2  obj.education=`哈佛`
3  del obj.name
4  obj.age=19
5  print(obj.__dict__)

三:物件屬性的查詢順序:先找物件自己的名稱空間---->類的名稱空間
 1 class People:
 2     x=1
 3     def __init__(self,name,age,sex):
 4         self.name=name
 5         self.age=age
 6         self.sex=sex
 7 
 8     def run(self): self=obj
 9         print(`%s is running` %self.name) obj.name
10 
11 obj=People(`egon`,18,`male`)     #People.__init__(obj,`egon`,18,`male`)
12 obj1=People(`egon1`,18,`male`)   #People.__init__(obj,`egon`,18,`male`)
13 obj2=People(`egon2`,18,`male`)   #People.__init__(obj,`egon`,18,`male`)

 


1、類的資料屬性:是給物件用的,而且直接共享給所有物件用的,記憶體地址都一樣
1  print(People.x)
2  People.x=11111
3 
4  print(id(People.x),People.x)
5  obj.x=`obj================》`
6  print(id(obj.x),obj.x)
7  print(id(obj1.x),obj1.x)
8  print(id(obj2.x),obj2.x)


2、類的函式屬性:也是給物件用,但是繫結給物件用的,繫結到不同的物件就是不同的
繫結方法,記憶體地址都不一樣,但其實只想都是同一個功能
1  print(People.run) 
>>> <function People.run at 0x00000226E7C78A60> 2 People.run(123123) 3 People.run(obj) 4 5 print(obj.run) 6 print(obj1.run) 7 print(obj2.run)

 



四:繫結方法的特殊之處:
1、 繫結給誰就應該由誰來呼叫,
2、誰來呼叫就會把誰當做第一個引數傳入
 1 class People:
 2     x=1
 3     def __init__(self,name,age,sex):
 4         self.name=name
 5         self.age=age
 6         self.sex=sex
 7 
 8     def run(self): self=obj
 9         print(`%s is running` %self.name) obj.name
10 
11     def f1():
12         print(`from f1`)
13 
14     def f2(self):
15         pass
16 
17 obj=People(`egon`,18,`male`) People.__init__(obj,`egon`,18,`male`)
18 obj1=People(`egon1`,18,`male`) People.__init__(obj,`egon`,18,`male`)
19 obj2=People(`egon2`,18,`male`) People.__init__(obj,`egon`,18,`male`)
20 
21 obj.run()
22 obj1.run()
23 obj2.run()
24 
25 print(People.f1)
26 People.f1()
27 print(obj.f1)
28 obj.f1() People.f1(obj)

 




五:一切皆物件:在python3中統一了類與型別的概念,類即型別
1 l=list([1,2,3])
2 print(type(l))
3 print(type(obj))
4 l.append(4)

 

相關文章