類的屬性:靜態屬性和動態屬性(方法)函數
靜態屬性就是直接在類中定義的變量spa
動態屬性(方法):就是定義在類中的方法(函數)code
注意:類的屬性是共享給因此的對象的,而類的動態屬性是綁定到全部對象的對象
建立一個對象/實例就會建立一個對象/實例的就會建立一個對象/實例的名稱空間,存放對象/實例的名字,稱爲對象/實例的屬性blog
在obj.name會先從obj本身的名稱空間裏找name,找不到則去類中找,類也找不到就找父類...最後都找不到就拋出異常繼承
軟件重要的方式:組合 繼承it
組合指的是,指一個類的對象做爲另外一個類對象的屬性。使倆個類之間產生關係class
# class Foo: # count = 0 # def __init__(self): # self.count += 1 # f1 = Foo() # f2 = Foo() # print(Foo.count) # 0 類的方法調用 # print(f1.count) # 1 對象f1對類方法調用 # print(f2.count) #1 對象f2 對類方法的調用 #這是倆個不一樣的對象因此,調用的結果都是爲1
例:請你寫一個類,可以統計一共實例化了多少個對象?
class Foo: count = 0 def __init__(self): Foo.count += 1 #生成一個對象就會是將類(Foo)的屬性+1 f1 = Foo() print(f1.count) #1 f2 = Foo() f3= Foo() print(f1.count) #3 print(f3.count) #3
當類中屬性發生改變的時候,對象中沒有同名的屬性。方法的時候,對象使用的屬性名會跟着類中的變量走變量
class Foo: count = [0] f1 = Foo() f1.count[0]+= 1 print(f1.count[0]) #1 print(Foo.count) #[1] f1.count = [2] #這部操做是給f1這個對象空間中增長屬性。 print(Foo.count) #[1]
只要對象的某個屬性被直接賦值,那麼必定是對象的命名空間發生了變化軟件
因此結論:只要是靜態變量,就直接用類名進行操做