python特性、属性以及私有化
生活随笔
收集整理的這篇文章主要介紹了
python特性、属性以及私有化
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?
python中特性attribute
-
特性是對象內(nèi)部的變量
-
對象的狀態(tài)由它的特性來描述,對象的方法可以改變它的特性
-
可以直接從對象外部訪問特性
特性示例:
?
python中私有化特性
為了讓外部無法訪問特性或方法,只要在名字前面加上雙下劃線即可。
特性私有化示例:
class Secret:__name = 'yoda' # 加上雙下劃線私有化特性def get_name(self): return self.__namedef __secret(self): # 私有化方法print "can't find"def access(self):return self.__secret() # 訪問器訪問私有方法A2 = Secret() A2.__name # 訪問不到特性! A2._Secret__name # 還是可以從外部訪問特性 yoda- python本質(zhì)上并不完全支持私有化,只不過是將名字進行改變了?
python中使用屬性(property)對特性進行訪問和設(shè)置
-
有一些面向?qū)ο笳Z言支持私有特性,這些特性無法從外部直接訪問,需要編寫getter和setter方法對這些特性進行操作
-
python不需要getter和seter方法,因為python中所有特性都是公開的,如果不放心使用直接訪問對象的特性,可以為對象編寫setter和getter方法,但是更好的解決辦法是使用屬性(property)
- python隱藏訪問器的方法,讓所有特性看起來一樣,這種通過訪問器定義的特性被稱為屬性
屬性使用示例:
# 第一種方法使用屬性 class foo:def __init__(self):self.name = 'yoda'self.work = 'master'def get_person(self):return self.name,self.workdef set_person(self,value):self.name,self.work = valueperson = property(get_person,set_person)運行如下: A3 = foo() A3.person ('yoda', 'master') A3.person = 'skylaer','programer' A3.person ('skylaer','programer')# 第二種方法使用屬性 class foo:def __init__(self):self.name = 'yoda'self.work = 'master'@propertydef person(self):return self.name,self.work@person.setter # 如果不指定stter屬性,那么無法從類的外部對它的值進行設(shè)置,這對于只讀特性非常有用def person(self,value):self.name,self.work = value ?-
property()第一個參數(shù)是getter方法,第二個參數(shù)是setter方法
-
property函數(shù)可以用0,1,2,3或者4個參數(shù)來調(diào)用,如果沒有參數(shù),產(chǎn)生的屬性既不可讀,也不可寫,這四個參數(shù)分別叫做fget,fset,fel,fdoc,如果想要一個屬性是只寫的,并且有一個文檔字符串,能使用他們作為關(guān)鍵字參數(shù)
轉(zhuǎn)載于:https://www.cnblogs.com/starsea/p/5429222.html
總結(jié)
以上是生活随笔為你收集整理的python特性、属性以及私有化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: div 自适应高度
- 下一篇: Python基础第一天