python特性、屬性以及私有化


 

python中特性attribute

  • 特性是對象內部的變量

  • 對象的狀態由它的特性來描述,對象的方法可以改變它的特性

  • 可以直接從對象外部訪問特性


特性示例:

class Person:
    name = 'yoda'              # 類中特性
    
    def get_name(self):        # 通過訪問器方法訪問特性
        return self.name
    
    def set_name(self, value): # 通過訪問器方法改變特性
        self.name = value

運行:
A1 = Person() 
A1.name                        # 直接從外部訪問特性
yoda
A1.name = 'master'             # 直接從外部改變特性

默認情況下,python支持從外部對特性進行操作,但它破壞了類的封裝原則,要從外部對象無法訪問,應該使用私有特性。

 

python中私有化特性

為了讓外部無法訪問特性或方法,只要在名字前面加上雙下划線即可。

特性私有化示例:

class Secret:
    __name = 'yoda'              # 加上雙下划線私有化特性
    def get_name(self):       
        return self.__name
    
    def __secret(self):          # 私有化方法
        print "can't find"
    
    def access(self):
        return self.__secret()   # 訪問器訪問私有方法

A2 = Secret()
A2.__name                        # 訪問不到特性!
A2._Secret__name                 # 還是可以從外部訪問特性
yoda
 
- python本質上並不完全支持私有化,只不過是將名字進行改變了        

 

python中使用屬性(property)對特性進行訪問和設置

  • 有一些面向對象語言支持私有特性,這些特性無法從外部直接訪問,需要編寫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.work
        
    def set_person(self,value):
        self.name,self.work = value
        
    person = 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'
    @property
    def person(self):
        return self.name,self.work
    @person.setter                   # 如果不指定stter屬性,那么無法從類的外部對它的值進行設置,這對於只讀特性非常有用
    def person(self,value):
        self.name,self.work = value
 
  • property()第一個參數是getter方法,第二個參數是setter方法

  • property函數可以用0,1,2,3或者4個參數來調用,如果沒有參數,產生的屬性既不可讀,也不可寫,這四個參數分別叫做fget,fset,fel,fdoc,如果想要一個屬性是只寫的,並且有一個文檔字符串,能使用他們作為關鍵字參數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM