面向對象 組合

回顧:類命名空間與對象,實例的命名空間

  類的屬性:靜態屬性和動態屬性(方法)函數

    靜態屬性就是直接在類中定義的變量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]

只要對象的某個屬性被直接賦值,那麼必定是對象的命名空間發生了變化軟件

因此結論:只要是靜態變量,就直接用類名進行操做

相關文章
相關標籤/搜索