成員修飾符就是設(shè)置類的成員有些是公開的有些是私有的,公開的是在外部通過對象或者類可以調(diào)用,但是私有的只能通過類的內(nèi)部才可以調(diào)用。
靜態(tài)字段修飾
#!/usr/bin/env python
# _*_coding:utf-8 _*_
class Foo:
# 公有的靜態(tài)字段
ClassMembers = "公開的"
# 私有的靜態(tài)字段
__ClassMembers = "私有的"
# 執(zhí)行公有的靜態(tài)字段
print(Foo.ClassMembers)
# 執(zhí)行私有的靜態(tài)字段
print(Foo.__ClassMembers)
/usr/bin/python3.5 /home/yangwen/文檔/Python_code/sublime/Week06/Day04/s2.py
公開的
Traceback (most recent call last):
File "/home/yangwen/文檔/Python_code/sublime/Week06/Day04/s2.py", line 14, in <module>
print(Foo.__ClassMembers)
AttributeError: type object 'Foo' has no attribute '__ClassMembers'
Process finished with exit code 1
私有的是不能夠直接調(diào)用的,需要在類中進(jìn)行調(diào)用,如下:
#!/usr/bin/env python
# _*_coding:utf-8 _*_
class Foo:
# 私有的靜態(tài)字段
__ClassMembers = "私有的"
# 通過類中的方法調(diào)用私有的靜態(tài)字段進(jìn)行輸出
def Members(self):
print(Foo.__ClassMembers)
# 創(chuàng)建一個對象
obj = Foo()
# 執(zhí)行類中的Members方法
obj.Members()
執(zhí)行結(jié)果
/usr/bin/python3.5 /home/yangwen/文檔/Python_code/sublime/Week06/Day04/s2.py
私有的
Process finished with exit code 0
普通字段修飾
#!/usr/bin/env python
# _*_coding:utf-8 _*_
class Foo:
# 類的構(gòu)造方法
def __init__(self, url):
# 普通字段
self.url = url
# 私有普通字段
self.__Blog = url
# 創(chuàng)建一個對象,傳入一個值
obj = Foo("http://yw666.blog.51cto.com")
# 普通字段
print(obj.url)
# 私有的普通字段
print(obj.__Blog)
輸出
/usr/bin/python3.5 /home/yangwen/文檔/Python_code/sublime/Week06/Day04/s2.py
http://yw666.blog.51cto.com
Traceback (most recent call last):
File "/home/yagnwen/文檔/Python_code/sublime/Week06/Day04/s2.py", line 22, in <module>
print(obj.__Blog)
AttributeError: 'Foo' object has no attribute '__Blog'
Process finished with exit code 1
若要輸出私有的普通字段,需要在類中調(diào)用私有的普通字段進(jìn)行輸出
#!/usr/bin/env python
# _*_coding:utf-8 _*_
class Foo:
# 類的構(gòu)造方法
def __init__(self, url):
# 私有普通字段
self.__Blog = url
# 直接在狗仔方法沒輸出傳入的URL
print(self.__Blog)
# 創(chuàng)建一個對象,傳入一個值
obj = Foo("http://yw666.blog.51cto.com")
輸出結(jié)果
yangwen@Darker:~$ python3 /home/yangwen/文檔/Python_code/sublime/Week06/Day04/s2.py
http://ansheng.me
對于私有的成員,只能夠在類中進(jìn)行訪問,即使是繼承關(guān)系也不可以,測試如下:
#!/usr/bin/env python
# _*_coding:utf-8 _*_
class Foo:
# 父類的構(gòu)造方法
def __init__(self):
# 私有普通字段
self.__Blog = "http://yw666.blog.51cto.com"
# Bar繼承了Foo類,
class Bar(Foo):
# 由于Bar類沒有構(gòu)造方法,所以會執(zhí)行他父類的構(gòu)造方法
# 創(chuàng)建一個類方法fetch
def fetch(self):
# 輸出self.__Blog
print(self.__Blog)
# 創(chuàng)建一個對象
obj = Bar()
# 執(zhí)行類中的fetch方法
obj.fetch()
輸出
yangwen@Darker:~$ python3 /home/yangwen/文檔/Python_code/sublime/Week06/Day04/s2.py
Traceback (most recent call last):
File "/home/yangwen/文檔/Python_code/sublime/Week06/Day04/s2.py", line 26, in <module>
obj.fetch()
File "/home/yangwen/文檔/Python_code/sublime/Week06/Day04/s2.py", line 20, in fetch
print(self.__Blog)
AttributeError: 'Bar' object has no attribute '_Bar__Blog'
對于普通方法、靜態(tài)方法類方法也是如此,只要成員前面加兩個下劃線就代表是私有的,即外部不能夠訪問,只有內(nèi)部才可以訪問。
#!/usr/bin/env python
# _*_coding:utf-8 _*_
class Foo:
# 父類的構(gòu)造方法
def __init__(self):
# 私有普通字段
self.__Blog = "http://yw666.blog.51cto.com"
# 創(chuàng)建一個對象
obj = Foo()
# 通過特殊的方法訪問
print(obj._Foo__Blog)
# 一個下劃線,一個類名,私有的變量名
輸出
ansheng@Darker:~$ python3 /home/yangwen/文檔/Python_code/sublime/Week06/Day04/s2.py
http://yw666.blog.51cto.com
本文出自 “一盞燭光” 博客,謝絕轉(zhuǎn)載!
更多建議: