類有兩種屬性:數據屬性和函數屬性。python
一、類的數據屬性是全部對象共享的編程
#類的數據屬性是全部對象共享的,id都同樣 print(id(OldboyStudent.school)) print(id(s1.school)) #4377347328 print(id(s2.school)) #4377347328 print(id(s3.school)) #4377347328
二、類的函數屬性是綁定給對象用的,稱爲綁定到對象的方法app
#類的函數屬性是綁定給對象使用的,obj.method稱爲綁定方法,內存地址都不同 print(OldboyStudent.learn) #<function OldboyStudent.learn at 0x1021329d8> print(s1.learn) #<bound method OldboyStudent.learn of <__main__.OldboyStudent object at 0x1021466d8>> print(s2.learn) #<bound method OldboyStudent.learn of <__main__.OldboyStudent object at 0x102146710>> print(s3.learn) #<bound method OldboyStudent.learn of <__main__.OldboyStudent object at 0x102146748>> #ps:id是python的實現機制,並不能真實反映內存地址,若是有內存地址,仍是之內存地址爲準
在obj.name會先從obj本身的名稱空間裏找name,找不到則去類中找,類也找不到就找父類...最後都找不到就拋出異常。函數
定義類並實例化出三個對象ui
class OldboyStudent: school='oldboy' def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex def learn(self): print('%s is learning' %self.name) #新增self.name def eat(self): print('%s is eating' %self.name) def sleep(self): print('%s is sleeping' %self.name) s1=OldboyStudent('李坦克','男',18) s2=OldboyStudent('王大炮','女',38) s3=OldboyStudent('牛榴彈','男',78)
類中定義的函數(沒有被任何裝飾器裝飾的)是類的函數屬性,類可使用,但必須遵循函數的參數規則,有幾個參數須要傳幾個參數code
OldboyStudent.learn(s1) #李坦克 is learning OldboyStudent.learn(s2) #王大炮 is learning OldboyStudent.learn(s3) #牛榴彈 is learning
類中定義的函數(沒有被任何裝飾器裝飾的),其實主要是給對象使用的,並且是綁定到對象的,雖然全部對象指向的都是相同的功能,可是綁定到不一樣的對象就是不一樣的綁定方法對象
強調:綁定到對象的方法的特殊之處在於,綁定給誰就由誰來調用,誰來調用,就會將‘誰’自己當作第一個參數傳給方法,即自動傳值(方法__init__
也是同樣的道理)。內存
python中一切皆爲對象,且python3中類與類型是一個概念,類型就是類。it
#類型dict就是類dict >>> list <class 'list'> #實例化的到3個對象l1,l2,l3 >>> l1=list() >>> l2=list() >>> l3=list() #三個對象都有綁定方法append,是相同的功能,但內存地址不一樣 >>> l1.append <built-in method append of list object at 0x10b482b48> >>> l2.append <built-in method append of list object at 0x10b482b88> >>> l3.append <built-in method append of list object at 0x10b482bc8> #操做綁定方法l1.append(3),就是在往l1添加3,絕對不會將3添加到l2或l3 >>> l1.append(3) >>> l1 [3] >>> l2 [] >>> l3 [] #調用類list.append(l3,111)等同於l3.append(111) >>> list.append(l3,111) #l3.append(111) >>> l3 [111]