Python面向?qū)ο蟪蓡T修飾符

2018-06-08 17:26 更新


成員修飾符就是設(shè)置類的成員有些是公開的有些是私有的,公開的是在外部通過對象或者類可以調(diào)用,但是私有的只能通過類的內(nèi)部才可以調(diào)用。


  • 靜態(tài)字段修飾

  1. #!/usr/bin/env python

  2. # _*_coding:utf-8 _*_

  3. class Foo:

  4.    # 公有的靜態(tài)字段

  5.    ClassMembers = "公開的"

  6.    # 私有的靜態(tài)字段

  7.    __ClassMembers = "私有的"

  8. # 執(zhí)行公有的靜態(tài)字段

  9. print(Foo.ClassMembers)

  10. # 執(zhí)行私有的靜態(tài)字段

  11. print(Foo.__ClassMembers)

  1. /usr/bin/python3.5 /home/yangwen/文檔/Python_code/sublime/Week06/Day04/s2.py

  2. 公開的

  3. Traceback (most recent call last):

  4.  File "/home/yangwen/文檔/Python_code/sublime/Week06/Day04/s2.py", line 14, in <module>

  5.    print(Foo.__ClassMembers)

  6. AttributeError: type object 'Foo' has no attribute '__ClassMembers'

  7. Process finished with exit code 1

私有的是不能夠直接調(diào)用的,需要在類中進(jìn)行調(diào)用,如下:

  1. #!/usr/bin/env python

  2. # _*_coding:utf-8 _*_

  3. class Foo:

  4.    # 私有的靜態(tài)字段

  5.    __ClassMembers = "私有的"

  6.    # 通過類中的方法調(diào)用私有的靜態(tài)字段進(jìn)行輸出

  7.    def Members(self):

  8.        print(Foo.__ClassMembers)

  9. # 創(chuàng)建一個對象

  10. obj = Foo()

  11. # 執(zhí)行類中的Members方法

  12. obj.Members()

執(zhí)行結(jié)果

  1. /usr/bin/python3.5 /home/yangwen/文檔/Python_code/sublime/Week06/Day04/s2.py

  2. 私有的

  3. Process finished with exit code 0

普通字段修飾

  1. #!/usr/bin/env python

  2. # _*_coding:utf-8 _*_

  3. class Foo:

  4.    # 類的構(gòu)造方法

  5.    def __init__(self, url):

  6.        # 普通字段

  7.        self.url = url

  8.        # 私有普通字段

  9.        self.__Blog = url

  10. # 創(chuàng)建一個對象,傳入一個值

  11. obj = Foo("http://yw666.blog.51cto.com")

  12. # 普通字段

  13. print(obj.url)

  14. # 私有的普通字段

  15. print(obj.__Blog)

輸出

  1. /usr/bin/python3.5 /home/yangwen/文檔/Python_code/sublime/Week06/Day04/s2.py

  2. http://yw666.blog.51cto.com

  3. Traceback (most recent call last):

  4.  File "/home/yagnwen/文檔/Python_code/sublime/Week06/Day04/s2.py", line 22, in <module>

  5.    print(obj.__Blog)

  6. AttributeError: 'Foo' object has no attribute '__Blog'

  7. Process finished with exit code 1

若要輸出私有的普通字段,需要在類中調(diào)用私有的普通字段進(jìn)行輸出

  1. #!/usr/bin/env python

  2. # _*_coding:utf-8 _*_

  3. class Foo:

  4.    # 類的構(gòu)造方法

  5.    def __init__(self, url):

  6.        # 私有普通字段

  7.        self.__Blog = url

  8.        # 直接在狗仔方法沒輸出傳入的URL

  9.        print(self.__Blog)

  10. # 創(chuàng)建一個對象,傳入一個值

  11. obj = Foo("http://yw666.blog.51cto.com")

輸出結(jié)果

  1. yangwen@Darker:~$ python3 /home/yangwen/文檔/Python_code/sublime/Week06/Day04/s2.py

  2. http://ansheng.me

對于私有的成員,只能夠在類中進(jìn)行訪問,即使是繼承關(guān)系也不可以,測試如下:

  1. #!/usr/bin/env python

  2. # _*_coding:utf-8 _*_

  3. class Foo:

  4.    # 父類的構(gòu)造方法

  5.    def __init__(self):

  6.        # 私有普通字段

  7.        self.__Blog = "http://yw666.blog.51cto.com"

  8. # Bar繼承了Foo類,

  9. class Bar(Foo):

  10.    # 由于Bar類沒有構(gòu)造方法,所以會執(zhí)行他父類的構(gòu)造方法

  11.    # 創(chuàng)建一個類方法fetch

  12.    def fetch(self):

  13.        # 輸出self.__Blog

  14.        print(self.__Blog)

  15. # 創(chuàng)建一個對象

  16. obj = Bar()

  17. # 執(zhí)行類中的fetch方法

  18. obj.fetch()

輸出

  1. yangwen@Darker:~$ python3 /home/yangwen/文檔/Python_code/sublime/Week06/Day04/s2.py

  2. Traceback (most recent call last):

  3.  File "/home/yangwen/文檔/Python_code/sublime/Week06/Day04/s2.py", line 26, in <module>

  4.    obj.fetch()

  5.  File "/home/yangwen/文檔/Python_code/sublime/Week06/Day04/s2.py", line 20, in fetch

  6.    print(self.__Blog)

  7. AttributeError: 'Bar' object has no attribute '_Bar__Blog'

對于普通方法、靜態(tài)方法類方法也是如此,只要成員前面加兩個下劃線就代表是私有的,即外部不能夠訪問,只有內(nèi)部才可以訪問。

通過特殊的方法去訪問類中的私有成員

  1. #!/usr/bin/env python

  2. # _*_coding:utf-8 _*_

  3. class Foo:

  4.    # 父類的構(gòu)造方法

  5.    def __init__(self):

  6.        # 私有普通字段

  7.        self.__Blog = "http://yw666.blog.51cto.com"

  8. # 創(chuàng)建一個對象

  9. obj = Foo()

  10. # 通過特殊的方法訪問

  11. print(obj._Foo__Blog)

  12. # 一個下劃線,一個類名,私有的變量名

輸出

  1. ansheng@Darker:~$ python3 /home/yangwen/文檔/Python_code/sublime/Week06/Day04/s2.py

  2. http://yw666.blog.51cto.com


本文出自 “一盞燭光” 博客,謝絕轉(zhuǎn)載!

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號