python的類訪問控制 私有屬性

2022-08-23 11:24:17 字數 1741 閱讀 7399

一、訪問控制私有屬性

class

person:

def__init__(self,name,age=19):

self.name =name

self.

__age =age

def growup(self,i=1):

if i > 0 and i < 150:

self.

__age += 1p1 = person('

tom'

)p1.growup(20)

print(person.__dict__

)print(p1.__dict__)#

print(p1.__age) # 不能訪問

通過上面例項可以看出,外部已經訪問不到__age了,age根本就沒有定義,更是訪問不到

通過方法來訪問

如:defgetage(self):

return self.__age

print

(p1.getage())

1、保護變數

class

person:

def__init__(self,name,age=19):

self.name =name

self._age = age

2、私有方法本質

3、屬性裝飾器

一般好的設計是:把例項的屬性保護起來,不讓外部直接訪問,外部使用getter讀取屬性和setter方法設定屬性

class

person:

def__init__(self,name,age=19):

self.name =name

self.

__age =age

defage(self):

return self.__age

defset_age(self,age):

self.

__age =age

tom = person('

tom'

)

print

(tom.age())

tom.set_age(20)

print

(tom.age())

以上通過age 和set_age方法操作屬性

通過屬性裝飾器來實現以上**

class

person:

def__init__(self,name,age=19):

self.name =name

self.

__age =age

@property

#屬性裝飾器

defage(self):

return self.__age

@age.setter

#更改屬性

defage(self,age):

self.

__age =age

@age.deleter

def age(self): #

屬性刪除

#def self.__age

tom = person('

tom'

)print

(tom.age)

tom.age = 20

print(tom.age)

Python訪問類的私有屬性和私有方法的正確姿勢

encoding utf 8 classperson 只允許擁有私有的name和age屬性 slots name age def init self name,age self.name name self.age age property defname self returnself.name ...

繼承的訪問控制 私有繼承

在私有繼承中,派生類以私有方式繼承基類。基類的公有成員和保護成員在派生類中成為私有成員,它們能被派生類的成員函式直接訪問,但不能被類外函式訪問,也不能在類外通過派生類的物件直接訪問。派生類不能直接訪問基類的私有成員,而只能派生類的成員函式中通過基類的公有或保護成員函式間接訪問。在設計基類時,通常都要...

訪問控制,私有屬性 方法

私有屬性 private 用雙下劃線開頭的屬性名,就是私有屬性class person def init self,name,age 18 self name name self.age age def growup self,i 1 if i 0 and i 150 控制邏輯 self.age i...