天天看點

執行個體屬性和類屬性的了解                                                                   -------  知識無價,汗水有情,如需搬運請注明出處,謝謝!

# class fun():
#     a = 1       # 類屬性
#     def l(self):
#         a = 4
#         print('a')
# b = fun()
# print(fun.a)



# class Test(object):
#     name = 'scolia'
#
# a = Test()
# Test.name = 'scolia good'   # 通過類進行修改類屬性,成功!連執行個體屬性都改了
# print(Test.name)
# print(a.name)


# class Test(object):
#     name = 'scolia'
#
# a = Test()
# a.name = 'scolia good'        # 通過執行個體進行修改,不成功,隻是相當于重新建立了執行個體屬性,沒有修改類屬性
# print(Test.name)
# print(a.name)

# 這裡的情況是我在執行個體中通路一個屬性,但是我執行個體中沒有,我就試圖去建立我的類中尋找有沒有這個屬性。
# 找到了,就有,沒找到,就抛出異常。(這裡說明了執行個體對象能夠通路類的屬性!反之,類對象不能通路執行個體屬性!)
# 而當我試圖用執行個體去修改一個在類中不可變的屬性的時候,我實際上并沒有修改,而是在我的執行個體中建立了這個屬性。
# 而當我再次通路這個屬性的時候,我執行個體中有,就不用去類中尋找了。

# class Test(object):
#     name = 'scolia'
#
# a = Test()
# a.abc = 123
# print(dir(Test))             # abc 自動在執行個體屬性中建立了
# print(dir(a))


# 已經證明了執行個體屬性能夠被類對象修改,試着通過執行個體修改類屬性
# class Test:
#     list1 = []
#
# a = Test()
# a.list1.append(123)     # 通過執行個體修改類中的清單
# print(Test.list1)
# print(a.list1)


# 也可以任性地為某個執行個體添加方法,python 支援動态添加屬性
# class Test:
#     pass
#
# def fangfa():
#     print('我是某個執行個體的方法')
#
# a = Test()
# b = Test()
# a.abc = fangfa  # 特意添加一個方法
# a.abc()
# b.abc()     # b 沒有這個方法

# 還能為類動态添加方法
class Test:
    pass

def fangfa(self):   # self 代表是執行個體方法,隻能由執行個體調用
    print('我是方法')

Test.abc = fangfa
a = Test()
a.abc()
b = Test()              # 已經修改(新增)了類的方法
b.abc()
      

  

                                                                   -------  知識無價,汗水有情,如需搬運請注明出處,謝謝!