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