class CLanguage : def setname(self, name): if len(name) < 3: raise ValueError('名稱長度必須大於3!') self.__name = name def getname(self): return self.__name #為 name 設定 setter 和 getter 方法 name = property(getname, setname) def setadd(self, add): if add.startswith("http://"): self.__add = add else: raise ValueError('地址必須以 http:// 開頭') def getadd(self): return self.__add #為 add 設定 setter 和 getter 方法 add = property(getadd, setadd) #定義個私有方法 def __display(self): print(self.__name,self.__add)注意,在這個類中,有一個 __display() 方法,由於其是私有方法,且該類沒有提供任何呼叫該方法的“介面”,因此在目前看來,此方法根本無法在類外部呼叫。也就是說,如下呼叫 __display() 方法是不可行的:
clang = CLanguage() #嘗試呼叫私有的 display() 方法 clang.__display()這會導致如下錯誤:
Traceback (most recent call last):
File "D:python3.61.py", line 33, in <module>
clang.__display()
AttributeError: 'CLanguage' object has no attribute '__display'
clang = CLanguage() #呼叫name的setname()方法 clang.name = "C語言中文網" #呼叫add的setadd()方法 clang.add = "http://c.biancheng.net" #直接呼叫隱藏的display()方法 clang._CLanguage__display()輸出結果為:
C語言中文網 http://c.biancheng.net
clang = CLanguage() clang.name = "C語言中文網" clang.add = "http://c.biancheng.net" #直接呼叫 name 和 add 私有屬性 print(clang._CLanguage__name,clang._CLanguage__add)執行結果為:
C語言中文網 http://c.biancheng.net
甚至於,我們還可以通過這種方式修改 clang 物件的私有屬性,例如:clang._CLanguage__name = "Python教學" clang._CLanguage__add = "http://c.biancheng.net/python" print(clang._CLanguage__name,clang._CLanguage__add)輸出結果為:
Python教學 http://c.biancheng.net/python